PostgreSQL롤 토토 시스템, 원래 쿼리에 사용 된 것보다 기타 테이블/뷰가 액세스됩니다. 업데이트 롤 토토을 사용하는 경우 테이블에 대한 쓰기 액세스가 포함될 수 있습니다.
재 작성 롤 토토에는 별도의 소유자가 없습니다. 관계 (표 또는보기)의 소유자는 자동으로 정의 된 재 작성 롤 토토의 소유자입니다.PostgreSQL롤 토토 시스템은 기본 액세스 제어 시스템의 동작을 변경합니다. 을 제외하고select
보안 호반보기와 관련된 롤 토토 (참조보기 만들기
), 롤 토토으로 인해 사용되는 모든 관계는 롤 토토을 호출하는 사용자가 아니라 롤 토토 소유자의 권한에 대해 확인됩니다. 이는 보안 호출 조회를 제외하고 사용자는 쿼리에 명시 적으로 명명 된 테이블/뷰에 필요한 권한 만 필요하다는 것을 의미합니다..
예 : 사용자는 일부 전화 번호 목록이 있으며 일부는 개인이며 다른 사람들은 사무실 보조원에게 관심이 있습니다. 사용자는 다음을 구성 할 수 있습니다.
테이블 Create Phone_Data (사람 문자, 전화 텍스트, 개인 부울);
해당 사용자 (및 데이터베이스 수퍼 유행자)를 제외한 아무도에 액세스 할 수 없습니다.Phone_data
테이블. 하지만 때문에grant
, 조수는 a를 실행할 수 있습니다.select
onPhone_number
보기. 롤 토토 시스템은를 다시 작성합니다.select
FromPhone_number
atselect
FromPhone_data
. 사용자는의 소유자이므로Phone_number
따라서 롤 토토의 소유자, 읽기 액세스Phone_data
이제 사용자의 권한에 대해 확인하고 쿼리가 허용됩니다. 액세스 점검Phone_number
도 수행되지만 이는 사용자와 보조원 외에는 사용할 수 없습니다.
권한은 규칙에 따라 규칙을 확인합니다. 따라서 조수는 현재 공중 전화 번호를 볼 수있는 유일한 사람입니다.Phone_number
어시스턴트의 견해를 통한 데이터. 조수가 할 수없는 것은 직접 액세스하는 견해를 만드는 것입니다Phone_data
. (실제로 보조원은 할 수 있지만 권한 수표 중에 모든 액세스가 거부되기 때문에 작동하지 않습니다.) 그리고 사용자가 조수가 열었다는 것을 알게 되 자마자Phone_number
view, 사용자는 조수의 액세스를 취소 할 수 있습니다. 즉시 조수의 견해에 대한 액세스가 실패 할 것입니다.
이 롤 토토 별 검사는 보안 구멍이라고 생각할 수도 있지만 실제로는 그렇지 않습니다. 그러나 이런 식으로 작동하지 않으면 조수는와 같은 열의 테이블을 설정할 수 있습니다.Phone_number
그리고 하루에 한 번 데이터를 거기에 복사하십시오. 그런 다음 어시스턴트 자체 데이터이며 조수는 원하는 모든 사람에게 액세스 권한을 부여 할 수 있습니다.grant
명령 수단,“나는 당신을 믿습니다”. 당신이 신뢰하는 사람이 위의 일을한다면, 그것을 생각하고 사용할 시간입니다Revoke
.
위에 표시된 기술을 사용하여 특정 열의 내용을 숨기는 데 뷰가 사용될 수 있지만이 아닌 한 보이지 않는 행으로 데이터를 안정적으로 숨기는 데 사용할 수 없습니다.Security_Barrier
플래그가 설정되었습니다. 예를 들어 다음 견해는 불안합니다.
view phone_number를 만듭니다
롤 토토 시스템이 모든 것을 다시 작성 하므로이보기가 안전 해 보일 수 있습니다select
FromPhone_number
atselect
FromPhone_data
그리고 어디에서만 항목 만있는 자격을 추가합니다전화
412로 시작하지 않습니다. 그러나 사용자가 자신의 기능을 만들 수 있다면 플래너가 전에 사용자 정의 기능을 실행하도록 설득하는 것은 어렵지 않습니다.좋아하지 않음
표현. 예를 들어:
기능을 작성하십시오. 까다로운 (텍스트, 텍스트)는 bool을 $$로 반환합니다
모든 사람과 전화 번호Phone_data
테이블은 A로 인쇄됩니다통지
, 플래너가 저렴한 실행을 선택하기 때문에까다로운
더 비싸기 전에 기능좋아하지 않음
. 사용자가 새로운 기능을 정의하지 못하도록하더라도 비슷한 공격에 내장 기능을 사용할 수 있습니다.
유사한 고려 사항이 업데이트 규칙에 적용됩니다. 이전 섹션의 예에서 예제 데이터베이스의 테이블 소유자가 권한을 부여 할 수 있습니다select
, 삽입
, 업데이트
및삭제
onShoelace
다른 사람을 보지만select
onshoelace_log
. 로그 항목을 작성하는 롤 토토 조치는 여전히 성공적으로 실행되며 다른 사용자는 로그 항목을 볼 수 있습니다.shoelace_log
자격이없는삽입
. 더 복잡한 시나리오에서는 사실이 아닐 수도 있습니다.
행 수준 보안을 제공하기 위해보기가 필요한 경우Security_Barrier
속성은보기에 적용되어야합니다. 이로 인해 악의적으로 선택된 기능과 연산자는보기가 작업을 수행 한 후까지 행에서 전달되는 값을 방지하지 못합니다.
(security_barrier)를 사용하여 view phone_number를 만듭니다
Security_Barrier
이 옵션없이 생성 된 뷰보다 훨씬 나빠질 수 있습니다. 일반적으로이를 피할 방법이 없습니다. 보안을 손상시킬 수 있다면 가능한 가장 빠른 계획을 거부해야합니다.
쿼리 플래너는 부작용이없는 함수를 다룰 때 유연성이 더 높습니다. 이러한 기능은라고합니다.LeakProof
, 많은 평등 연산자와 같이 많은 단순하고 일반적으로 사용되는 연산자를 포함합니다. 쿼리 플래너는 쿼리 실행 프로세스의 어느 시점에서도 이러한 기능을 안전하게 평가할 수 있습니다. 사용자가 보이지 않는 행에서 호출하면 보이지 않는 행에 대한 정보가 유출되지 않기 때문입니다.LeakProof
뷰에서 데이터를받지 못하므로 밀려옵니다. 대조적으로, 인수로 수신 된 값에 따라 오류를 던질 수있는 함수 (예 : 오버플로 또는 분할이 0으로 오류를 던지는 것과 같은)는 누출 방지되지 않으며 보안보기의 행 필터에 적용되면 보이지 않는 행에 대한 중요한 정보를 제공 할 수 있습니다..
|Security_Barrier
옵션은 보이지 않는 튜플의 내용이 안전 보안 기능으로 전달되지 않는다는 제한된 의미에서만 고안되도록 고안됩니다. 사용자는 보이지 않는 데이터에 대해 추론하는 다른 수단이있을 수 있습니다.설명
또는보기에 대한 쿼리 실행 시간을 측정하십시오. 악의적 인 공격자는 보이지 않는 데이터의 양에 대한 것을 유추하거나 데이터 배포 또는 가장 일반적인 값에 대한 정보를 얻을 수있을 수도 있습니다 (이러한 것들이 계획의 실행 시간에 영향을 줄 수 있으므로, 심지어 최적화 통계에 반영되기 때문에 계획의 선택).
문서에 올바르지 않은 내용이 있으면 일치하지 않습니다.이 양식문서 문제를보고하려면