CREATE ROW POLICY
테이블에서 사용자가 읽을 수 있는 행을 결정하는 데 사용되는 필터인 행 정책(ROW POLICY)을 생성합니다.
행 정책은 읽기 전용(readonly) 권한을 가진 사용자에게만 의미가 있습니다. 사용자가 테이블을 수정하거나 테이블 간에 파티션을 복사할 수 있으면 행 정책에 의한 제한이 무력화됩니다.
구문:
USING Clause
이 절을 사용하면 조건을 지정하여 행을 필터링할 수 있습니다. 사용자는 해당 행에 대해 조건 계산 결과가 0이 아니면 그 행을 보게 됩니다.
TO 절
TO 섹션에서는 이 policy가 적용되어야 하는 사용자와 역할 목록을 지정할 수 있습니다. 예를 들어 CREATE ROW POLICY ... TO accountant, john@localhost 와 같이 사용할 수 있습니다.
키워드 ALL 은 현재 사용자를 포함한 모든 ClickHouse 사용자를 의미합니다. 키워드 ALL EXCEPT 은 전체 사용자 목록에서 일부 사용자를 제외할 수 있습니다. 예를 들어 CREATE ROW POLICY ... TO ALL EXCEPT accountant, john@localhost 와 같이 사용할 수 있습니다.
AS 절
하나의 테이블에 대해 동일한 USER에 대해 동시에 둘 이상의 정책을 활성화할 수 있습니다. 따라서 여러 정책의 조건을 결합하는 방법이 필요합니다.
기본적으로 정책은 불리언 OR 연산자를 사용하여 결합됩니다. 예를 들어, 다음과 같은 정책이 있습니다:
사용자 peter가 b=1 또는 c=2인 행을 볼 수 있도록 합니다.
AS 절은 정책을 다른 정책과 어떻게 결합할지 지정합니다. 정책은 허용적이거나 제한적일 수 있습니다. 기본적으로 정책은 허용적이며, 이는 boolean OR 연산자를 사용해 결합된다는 의미입니다.
정책은 또 다른 방식으로 제한적으로 정의할 수도 있습니다. 제한적 정책은 boolean AND 연산자를 사용해 결합됩니다.
일반적인 수식은 다음과 같습니다:
예를 들어, 다음과 같은 정책이 있습니다:
USER peter가 b=1 AND c=2를 모두 만족하는 행만 볼 수 있도록 설정합니다.
데이터베이스 정책은 테이블 정책과 함께 적용됩니다.
예를 들어, 다음과 같은 정책이 있습니다.
사용자 peter가 b=1이면서 c=2인 경우에만 table1의 행을 조회할 수 있도록 하되, mydb의 다른 테이블에는 이 사용자에게 b=1 정책만 적용되도록 합니다.
ON CLUSTER 절
이 절을 사용하면 클러스터에서 행 정책을 생성할 수 있습니다. 자세한 내용은 분산 DDL을 참고하십시오.
예시
CREATE ROW POLICY filter1 ON mydb.mytable USING a<1000 TO accountant, john@localhost
CREATE ROW POLICY filter2 ON mydb.mytable USING a<1000 AND b=5 TO ALL EXCEPT mira
CREATE ROW POLICY filter3 ON mydb.mytable USING 1 TO admin
CREATE ROW POLICY filter4 ON mydb.* USING 1 TO admin