CREATE ROW POLICY
行ポリシーを作成します。つまり、ユーザーがテーブルからどの行を読み取れるかを判断するために使用されるフィルタリングです。
行ポリシーは、読み取り専用アクセスを持つユーザーに対してのみ意味があります。ユーザーがテーブルを変更したり、テーブル間でパーティションをコピーできる場合、行ポリシーによる制限は意味をなさなくなります。
構文:
USING 句
行をフィルタリングする条件を指定できます。条件がその行に対して 0 以外の値になると、その行はユーザーに表示されます。
TO 句
TO 句では、このポリシーを適用するユーザーおよびロールのリストを指定できます。例えば、CREATE ROW POLICY ... TO accountant, john@localhost のようになります。
キーワード ALL は、現在のユーザーを含むすべての ClickHouse ユーザーを意味します。キーワード ALL EXCEPT は、すべてのユーザーのリストから特定のユーザーを除外することができます。例えば、CREATE ROW POLICY ... TO ALL EXCEPT accountant, john@localhost のようになります。
AS 句
同じテーブルおよび同じユーザーに対して、同時に複数のポリシーを有効にすることができます。そのため、複数のポリシーに含まれる条件を組み合わせる方法が必要になります。
デフォルトでは、ポリシーは論理演算子 OR を使って結合されます。たとえば、次のようなポリシーがある場合を考えます。
ユーザー peter が、b=1 または c=2 の行を閲覧できるようにします。
AS 句は、ポリシーを他のポリシーとどのように組み合わせるかを指定します。ポリシーは、許可ポリシー (permissive) または制限ポリシー (restrictive) のいずれかです。デフォルトではポリシーは許可ポリシーであり、ブール演算子 OR で組み合わされることを意味します。
代わりにポリシーを制限ポリシーとして定義することもできます。制限ポリシーはブール演算子 AND で組み合わされます。
一般的な式は次のとおりです。
たとえば、次のポリシーがあります。
ユーザー peter が b=1 かつ c=2 の行だけを閲覧できるようにします。
データベースポリシーはテーブルポリシーと組み合わされます。
たとえば、次のポリシーがあります。
ユーザー peter に対しては、b=1 かつ c=2 の両方を満たす場合にのみ table1 の行を参照できるように設定しつつ、
mydb 内の他のテーブルには、そのユーザーに対して b=1 のポリシーのみが適用されるようにします。
ON CLUSTER Clause
クラスター上で行ポリシーを作成できるようになります。Distributed 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