이 문서는 지원되지 않는 버전의 PostgreSQL을위한 것입니다.
당신은에 대해 같은 페이지를 볼 수 있습니다PostgreSQL : 문서 : 17 : 39.5. 롤 스포츠 토토 및 특권버전 또는 위에 나열된 다른 지원 버전 중 하나입니다.

38.5. 스포츠 토토 및 특권

PostgreSQL스포츠 토토 시스템, 기타 테이블/뷰 원래 쿼리에 사용 된 것보다 액세스 할 수 있습니다. 업데이트시 스포츠 토토은 사용되며 테이블에 대한 쓰기 액세스가 포함될 수 있습니다.

재 작성 스포츠 토토에는 별도의 소유자가 없습니다. a의 소유자 관계 (표 또는보기)는 자동으로 다시 쓰기 소유자입니다. 정의 된 스포츠 토토. 그만큼postgresql스포츠 토토 시스템은 동작을 변경합니다 기본 액세스 제어 시스템. 그로 인해 사용되는 관계 스포츠 토토은 스포츠 토토 소유자의 권한에 대해 확인됩니다. 사용자가 스포츠 토토을 호출합니다. 이것은 사용자가 만 있으면됩니다 그가 명시 적으로 이름을 지정하는 테이블/뷰에 필요한 권한 그의 질문에.

예 : 사용자는 일부의 전화 번호 목록이 있습니다. 그것들은 사적이고, 다른 사람들은 비서관에게 관심이 있습니다. 사무실. 그는 다음을 구성 할 수 있습니다.

테이블 Create Phone_Data (사람 문자, 전화 텍스트, 개인 부울);
view phone_number를 만듭니다
    개인 선택, 사례가없는 경우 전화로 전화로 전화로 종료
    Phone_data에서;
Phone_number에서 Select Grant Select에서 비서에게;

그 (및 데이터베이스 수퍼 유행자)를 제외한 아무도에 액세스 할 수 없습니다.Phone_data테이블. 하지만 때문에grant, 비서는 a를 운영 할 수 있습니다.selectonPhone_number보기. 스포츠 토토 시스템은를 다시 작성합니다.selectFromPhone_numberatselectFromphone_data. 사용자는의 소유자이므로phone_number따라서 소유자 스포츠 토토, 읽기 액세스Phone_dataIS 이제 그의 특권에 대해 확인하면 쿼리가 허용됩니다. 그만큼 액세스 점검phone_number도 있습니다 수행되었지만 이것은 호출 사용자에 대해 수행되므로 아무도 그러나 사용자와 비서는 그것을 사용할 수 있습니다.

권한은 스포츠 토토에 따라 스포츠 토토을 확인합니다. 그래서 비서는 이제 공중 전화 번호를 볼 수있는 유일한 사람. 그러나 비서관은 또 다른 견해를 설정하고 공공의. 그런 다음 누구나를 볼 수 있습니다.Phone_number비서의 견해를 통한 데이터. 무엇 장관은 할 수 없음이 직접 접근하는 견해를 만드는 것입니다Phone_data. (실제로 그는 할 수 있지만 그렇게 할 것입니다 허가 중에 모든 액세스가 거부되므로 작동하지 않습니다. 수표.) 그리고 사용자가 알리 자마자 장관은 그의 열기phone_number볼 수 있습니다 그의 접근을 취소했다. 즉시 비서관의 견해에 대한 접근 실패 할 것입니다.

이 스포츠 토토별 검사가 보안이라고 생각할 수도 있습니다. 구멍이지만 실제로는 그렇지 않습니다. 그러나 그것이 이런 식으로 작동하지 않으면 비서관은와 같은 열의 테이블을 설정할 수 있습니다.Phone_number그리고 데이터를 한 번만 복사하십시오 낮. 그러면 그것은 자신의 데이터이며 그는 모든 사람에게 액세스 권한을 부여 할 수 있습니다. 원한다. 에이grant명령 수단,"나는 당신을 믿습니다". 당신이 신뢰하는 사람이 그 일을한다면 위의, 이제 생각하고 사용할 시간입니다Revoke.

뷰는의 내용을 숨기는 데 사용될 수 있습니다. 위에 표시된 기술을 사용하는 특정 열은 이 아니라면 보이지 않는 행으로 데이터를 안정적으로 숨기는 데 사용됩니다.Security_Barrier플래그가 설정되었습니다. 을 위한 예를 들어 다음 견해는 안전하지 않습니다.

view phone_number를 만듭니다
    전화 _Data에서 전화를 선택하여 전화가 '412%'를 좋아하지 않는 경우;

스포츠 토토 시스템이 다시 작성 되므로이보기는 안전 해 보일 수 있습니다. 어느selectFromPhone_numberatselectFromPhone_data자격을 추가하십시오 그것은 어디에서만전화그렇지 않습니다 412로 시작하십시오. 그러나 사용자가 자신의 것을 만들 수 있다면 자신의 기능, 플래너에게 설득하는 것은 어렵지 않습니다. 전에 사용자 정의 함수를 실행합니다.좋아하지표현. 예를 들어:

기능 생성 까다 롭습니다 (텍스트, 텍스트)는 bool을 $$로 반환합니다
시작하다
    통지 ' % = %', $ 1, $ 2;
    진실을 반환하십시오.
끝
$$ 언어 PLPGSQL 비용 0.000000000000000000000001;

The Tricky (Person, Phone);에서 * Phone_number에서 *를 선택하십시오.

모든 사람과 전화 번호phone_data테이블은 A로 인쇄됩니다통지, 플래너가 실행하기로 선택하기 때문에 저렴한까다로운함수 더 비싼 전좋아하지. 사용자가 새로운 기능을 정의하는 것이 방지 되더라도 내장 기능은 유사한 공격에 사용될 수 있습니다. (예를 들어, 대부분 캐스트 기능에는 오류 메시지의 입력 값이 포함됩니다. 그들은 생산합니다.)

유사한 고려 사항이 업데이트 스포츠 토토에 적용됩니다. 의 예에서 이전 섹션, 예제의 테이블 소유자 데이터베이스는 권한을 부여 할 수 있습니다select, 삽입, 업데이트삭제onShoelace다른 사람을 보지만selectonShoelace_log. 로그 항목을 작성하는 스포츠 토토 조치 여전히 성공적으로 실행되며 다른 사용자가 로그 항목. 그러나 그는 가짜 항목을 만들 수 없으며, 그는 할 수 없습니다 기존의 것을 조작하거나 제거하십시오. 이 경우 아니요 플래너에게 설득함으로써 스포츠 토토을 전복시킬 가능성 유일한 스포츠 토토이기 때문에 운영 순서를 변경합니다. 참조shoelace_log자격이없는삽입. 이것은 더 이상 사실이 아닐 수도 있습니다 복잡한 시나리오.

로드 레벨 보안을 제공하기 위해보기가 필요한 경우, 그만큼Security_Barrier속성이 있어야합니다 보기에 적용됩니다. 이것은 악의적으로 선택된 기능을 방지합니다 조회수가 끝날 때까지 운영자 그 일. 예를 들어, 위에 표시된 뷰가 생성 된 경우 이처럼 안전 할 것입니다 :

(security_barrier)를 사용하여 view phone_number를 만듭니다
    전화 _Data에서 전화를 선택하여 전화가 '412%'를 좋아하지 않는 경우;

Security_Barrier이 옵션없이 생성 된 뷰보다 훨씬 나빠질 수 있습니다. ~ 안에 일반, 이것을 피할 방법이 없습니다 : 가능한 가장 빠른 계획 보안을 손상시킬 수있는 경우 거부해야합니다. 이런 이유로 이 옵션은 기본적으로 활성화되지 않습니다.

쿼리 플래너는 처리 할 때 더 많은 유연성을 가지고 있습니다 부작용이없는 기능. 이러한 기능은 언급됩니다 처럼LeakProof많은 평등 연산자와 같이 일반적으로 사용되는 운영자. 쿼리 플래너는 그러한 기능을 모든 것에 대해 안전하게 평가할 수 있습니다 쿼리 실행 프로세스를 포인트로 행으로 호출하므로 사용자가 보이지 않는 것은 보이지 않는 행. 대조적으로, 오류를 던질 수있는 함수 인수로받은 값 (예 : 오버플로 또는 분할의 경우 0으로 오류를 던진다) 누출 방지되지 않으며,에 대한 중요한 정보를 제공 할 수 있습니다 보안보기의 행 필터 앞에 적용되는 경우 보이지 않는 행.

Security_Barrier옵션이 의도 된 것입니다 보이지 않는 내용물이 제한된 의미에서만 확보 튜플은 가능한 안전한 기능으로 전달되지 않습니다. 사용자 보이지 않는 것에 대해 추론하는 다른 수단이있을 수 있습니다. 데이터; 예를 들어, 쿼리 계획을 사용하여를 볼 수 있습니다.설명또는 쿼리 실행 시간을 측정하십시오 보기. 악의적 인 공격자는 무언가를 추론 할 수 있습니다 보이지 않는 데이터 금액 또는 일부 정보를 얻는 것 데이터 분포 또는 가장 일반적인 값에 대해 상황은 계획의 실행 시간에 영향을 줄 수 있습니다. 또는 심지어는 또한 Optimizer 통계, 계획 선택에 반영). 만약에 이러한 유형의 "은밀한 채널"공격은 우려됩니다. 아마도 데이터에 대한 액세스 권한을 전혀 허용하지 않을 것입니다.