39.5. 규칙 및 특권#

다음에 의한 쿼리 재작성으로 인해포스트그레SQL토토 사이트 시스템에서는 원래 쿼리에 사용된 테이블/뷰가 아닌 다른 테이블/뷰에 액세스합니다. 업데이트 토토 사이트을 사용하면 테이블에 대한 쓰기 액세스가 포함될 수 있습니다.

재작성 토토 사이트에는 별도의 소유자가 없습니다. 관계(테이블 또는 뷰)의 소유자는 자동으로 해당 관계에 대해 정의된 다시 쓰기 토토 사이트의 소유자가 됩니다.포스트그레SQL토토 사이트 시스템은 기본 액세스 제어 시스템의 동작을 변경합니다. 를 제외하고선택보안 호출자 보기와 관련된 토토 사이트(참조뷰 만들기), 토토 사이트으로 인해 사용되는 모든 관계는 토토 사이트을 호출하는 사용자가 아닌 토토 사이트 소유자의 권한에 대해 확인됩니다. 즉, 보안 호출자 뷰를 제외하고 사용자에게는 쿼리에서 명시적으로 명명된 테이블/뷰에 대해 필요한 권한만 있으면 됩니다.

예: 사용자는 전화번호 목록 중 일부는 비공개이고 나머지는 사무실 비서가 관심을 갖는 전화번호 목록을 가지고 있습니다. 사용자는 다음을 구성할 수 있습니다.

CREATE TABLEphone_data(사람 문자, 전화 문자, 개인 부울);
전화번호 보기를 AS로 생성
    사람을 선택하고 비공개가 아닌 경우 CASE 그런 다음 전화로 전화를 종료하세요.
    전화_데이터에서;
보조자에게 전화번호에 대한 선택 부여;

해당 사용자(및 데이터베이스 수퍼유저) 외에는 누구도 액세스할 수 없습니다.phone_data테이블. 하지만 그 때문에그랜트, 어시스턴트는 다음을 실행할 수 있습니다.선택전화_번호보기. 규칙 시스템은 다음을 다시 작성합니다.선택from전화_번호으로선택에서phone_data. 사용자가 소유자이므로전화_번호따라서 규칙의 소유자는 다음에 대한 읽기 액세스 권한입니다.phone_data이제 사용자의 권한에 대해 확인되고 쿼리가 허용됩니다. 접속 확인전화_번호또한 수행되지만 이는 호출하는 사용자에 대해 수행되므로 사용자와 보조자 외에는 누구도 사용할 수 없습니다.

권한은 규칙별로 확인됩니다. 따라서 현재 공중전화번호를 볼 수 있는 사람은 비서뿐입니다. 그러나 어시스턴트는 또 다른 보기를 설정하고 대중에게 이에 대한 액세스 권한을 부여할 수 있습니다. 그러면 누구든지 볼 수 있습니다.전화_번호어시스턴트 뷰를 통한 데이터. 어시스턴트가 할 수 없는 일은 직접 액세스하는 뷰를 생성하는 것입니다.phone_data. (실제로 어시스턴트는 할 수 있지만 권한 확인 중에 모든 액세스가 거부되므로 작동하지 않습니다.) 그리고 사용자가 어시스턴트가 자신의 계정을 열었다는 것을 알게 되자마자전화_번호view, 사용자는 어시스턴트의 접근 권한을 취소할 수 있습니다. 즉시 어시스턴트 뷰에 대한 액세스가 실패합니다.

이 규칙별 확인이 보안 허점이라고 생각할 수도 있지만 실제로는 그렇지 않습니다. 그러나 이 방법으로 작동하지 않으면 보조자는 다음과 동일한 열로 테이블을 설정할 수 있습니다.전화_번호그리고 하루에 한 번씩 거기에 데이터를 복사하세요. 그런 다음 이는 어시스턴트의 자체 데이터이며 어시스턴트는 원하는 모든 사람에게 액세스 권한을 부여할 수 있습니다. 갑부여명령은 다음을 의미합니다.나는 당신을 신뢰합니다. 귀하가 신뢰하는 누군가가 위의 작업을 수행한다면, 이제 곰곰이 생각한 후 사용해야 할 때입니다.취소.

위에 표시된 기술을 사용하여 뷰를 사용하여 특정 열의 내용을 숨길 수 있지만 다음과 같은 경우가 아니면 보이지 않는 행의 데이터를 안정적으로 숨기는 데 사용할 수 없습니다.security_barrier플래그가 설정되었습니다. 예를 들어 다음 뷰는 안전하지 않습니다.

CREATE VIEW 전화번호 AS
    전화가 '412%'가 아닌 곳에서 전화_데이터에서 사람, 전화를 선택하세요.

토토 사이트 시스템이 모든 항목을 다시 작성하므로 이 보기는 안전해 보일 수 있습니다.선택에서전화_번호으로선택fromphone_data그리고 다음 항목만 해당하는 제한을 추가합니다.전화412로 시작하지 않음을 원합니다. 그러나 사용자가 자신만의 함수를 만들 수 있다면 기획자가 사용자 정의 함수를 실행하기 전에 실행하도록 설득하는 것은 어렵지 않습니다.좋아하지 않음식. 예를 들면:

CREATE FUNCTION 까다로운(텍스트, 텍스트) $$로 bool을 반환합니다.
시작
    공지 올리기 '% = %', $1, $2;
    반환 참;
끝;
$$ 언어 plpgsql 비용 0.0000000000000000000001;

SELECT * FROM 전화_번호 WHERE 까다로움(사람, 전화);

모든 사람과 전화번호phone_data테이블은 다음과 같이 인쇄됩니다.공지, 기획자는 저렴한 실행을 선택하기 때문에까다롭습니다더 비싼 것보다 먼저 함수좋아하지 않음. 사용자가 새로운 기능을 정의할 수 없더라도 내장된 기능을 유사한 공격에 사용할 수 있습니다. (예를 들어 대부분의 캐스팅 함수는 생성되는 오류 메시지에 입력 값을 포함합니다.)

업데이트 규칙에도 비슷한 고려사항이 적용됩니다. 이전 섹션의 예시에서는 예시 데이터베이스의 테이블 소유자가 권한을 부여할 수 있었습니다.선택, 삽입, 업데이트삭제신발끈다른 사람에게만 볼 수 있음선택켜짐신발끈_로그. 로그 항목을 작성하는 규칙 작업은 계속 성공적으로 실행되며 해당 다른 사용자가 로그 항목을 볼 수 있습니다. 하지만 가짜 항목을 만들 수도 없고, 기존 항목을 조작하거나 제거할 수도 없습니다. 이 경우, 참조하는 유일한 규칙이기 때문에 기획자가 작업 순서를 변경하도록 설득하여 규칙을 전복할 가능성은 없습니다.신발끈_로그부적격자입니다삽입. 더 복잡한 시나리오에서는 그렇지 않을 수도 있습니다.

뷰가 행 수준 보안을 제공해야 하는 경우,security_barrier속성을 뷰에 적용해야 합니다. 이렇게 하면 뷰가 작업을 완료할 때까지 악의적으로 선택된 함수와 연산자가 행에서 값이 전달되는 것을 방지할 수 있습니다. 예를 들어 위에 표시된 뷰가 다음과 같이 생성되었다면 안전할 것입니다.

(보안 장벽) AS로 전화번호 보기 만들기
    전화가 '412%'가 아닌 곳에서 전화_데이터에서 사람, 전화를 선택하세요.

다음으로 생성된 보기security_barrier이 옵션 없이 생성된 보기보다 성능이 훨씬 떨어질 수 있습니다. 일반적으로 이를 피할 수 있는 방법은 없습니다. 보안이 손상될 수 있는 경우 가장 빠른 계획을 거부해야 합니다. 이러한 이유로 이 옵션은 기본적으로 활성화되어 있지 않습니다.

쿼리 플래너는 부작용이 없는 함수를 처리할 때 더 많은 유연성을 갖습니다. 이러한 기능을 다음과 같이 지칭합니다.누출 방지, 등호 연산자와 같이 간단하고 일반적으로 사용되는 연산자를 많이 포함합니다. 쿼리 플래너는 사용자에게 보이지 않는 행에서 함수를 호출해도 보이지 않는 행에 대한 정보가 유출되지 않으므로 쿼리 실행 프로세스의 어느 시점에서나 이러한 함수를 안전하게 평가할 수 있습니다. 또한 인수를 취하지 않거나 보안 장벽 관점에서 인수가 전달되지 않는 함수는 다음과 같이 표시할 필요가 없습니다.누출 방지뷰에서 데이터를 수신하지 않기 때문에 푸시다운됩니다. 대조적으로, 인수로 수신된 값에 따라 오류를 발생시킬 수 있는 함수(예: 오버플로 또는 0으로 나누는 경우 오류를 발생시키는 함수)는 누출 방지 기능이 없으며 보안 뷰의 행 필터 전에 적용될 경우 보이지 않는 행에 대한 중요한 정보를 제공할 수 있습니다.

다음으로 생성된 뷰도 다음을 사용하여 생성된다는 점을 이해하는 것이 중요합니다.security_barrier옵션은 보이지 않는 튜플의 내용이 안전하지 않을 수 있는 함수에 전달되지 않는다는 제한된 의미에서만 안전하도록 의도되었습니다. 사용자는 보이지 않는 데이터에 대해 추론할 수 있는 다른 수단을 가질 수도 있습니다. 예를 들어, 다음을 사용하여 쿼리 계획을 볼 수 있습니다.설명또는 뷰에 대한 쿼리 실행 시간을 측정합니다. 악의적인 공격자는 보이지 않는 데이터의 양에 대해 추론할 수도 있고 데이터 분포 또는 가장 일반적인 값에 대한 일부 정보를 얻을 수도 있습니다(이러한 사항은 계획의 실행 시간에 영향을 줄 수 있거나 심지어 최적화 프로그램 통계, 계획 선택에도 반영되기 때문입니다). 이러한 유형의 '비밀 채널' 공격이 우려되는 경우 데이터에 대한 액세스 권한을 전혀 부여하는 것은 아마도 현명하지 못할 것입니다.

수정사항 제출

문서에 올바르지 않은 내용이 있으면 일치하지 않습니다. 특정 기능에 대한 경험이 있거나 추가 설명이 필요한 경우 이용해주세요이 양식문서 문제를 보고합니다.