CREATE ROW POLICY
Creates a row policy, すなわち、ユーザーがテーブルから読み取ることのできる行を決定するために使用されるフィルター。
行ポリシーは、読み取り専用アクセスを持つユーザーにのみ意味があります。ユーザーがテーブルを変更したり、テーブル間でパーティションをコピーできる場合、行ポリシーの制約は無効になります。
構文:
USING Clause
行をフィルタリングする条件を指定できます。条件が行に対して非ゼロと計算される場合、ユーザーはその行を見ることができます。
TO Clause
TO
セクションでは、このポリシーが適用されるユーザーやロールのリストを提供できます。例えば、CREATE ROW POLICY ... TO accountant, john@localhost
。
キーワードALL
は、現在のユーザーを含む全てのClickHouseユーザーを意味します。キーワードALL EXCEPT
は、全ユーザーリストから一部のユーザーを除外することを可能にします。例えば、CREATE ROW POLICY ... TO ALL EXCEPT accountant, john@localhost
。
テーブルに行ポリシーが定義されていない場合、任意のユーザーはテーブルからすべての行をSELECT
できます。テーブルに1つ以上の行ポリシーを定義すると、テーブルへのアクセスは行ポリシーに依存し、現在のユーザーに対してこれらの行ポリシーが定義されているかどうかにかかわらず、その影響を受けます。例えば、次のポリシー:
CREATE ROW POLICY pol1 ON mydb.table1 USING b=1 TO mira, peter
はユーザーmira
およびpeter
がb != 1
の行を見ることを禁止し、非指定のユーザー(例:ユーザーpaul
)はmydb.table1
の行を全く見ることができません。
それが望ましくない場合、次のようにもう1つの行ポリシーを追加することで修正できます:
CREATE ROW POLICY pol2 ON mydb.table1 USING 1 TO ALL EXCEPT mira, peter
AS Clause
同じテーブルに対して同じユーザーに複数のポリシーを同時に有効にすることができます。したがって、複数のポリシーから条件を結合する方法が必要です。
デフォルトでは、ポリシーはブールOR
演算子を使用して結合されます。例えば、次のポリシー:
はユーザーpeter
がb=1
またはc=2
のいずれかの行を見ることを可能にします。
AS
句は、ポリシーを他のポリシーとどのように結合するかを指定します。ポリシーは許可型または制限型のいずれかとして定義できます。デフォルトでは、ポリシーは許可型であり、これはブールOR
演算子を使用して結合されることを意味します。
ポリシーは代わりに制限型として定義できます。制限型ポリシーはブールAND
演算子を使用して結合されます。
一般的な式は次のとおりです:
例えば、次のポリシー:
はユーザーpeter
が両方b=1
およびc=2
の場合にのみ行を見ることを可能にします。
データベースポリシーはテーブルポリシーと組み合わされます。
例えば、次のポリシー:
はユーザーpeter
がテーブル1の行を見ることを可能にするのは両方b=1
およびc=2
である場合に限られますが、mydb内の他の任意のテーブルには、ユーザーに対してb=1
ポリシーのみが適用されます。
ON CLUSTER Clause
クラスター上で行ポリシーを作成することを可能にします。Distributed DDLを参照してください。
Examples
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