メインコンテンツまでスキップ
メインコンテンツまでスキップ

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およびpeterb != 1の行を見ることを禁止し、非指定のユーザー(例:ユーザーpaul)はmydb.table1の行を全く見ることができません。

それが望ましくない場合、次のようにもう1つの行ポリシーを追加することで修正できます:

CREATE ROW POLICY pol2 ON mydb.table1 USING 1 TO ALL EXCEPT mira, peter

AS Clause

同じテーブルに対して同じユーザーに複数のポリシーを同時に有効にすることができます。したがって、複数のポリシーから条件を結合する方法が必要です。

デフォルトでは、ポリシーはブールOR演算子を使用して結合されます。例えば、次のポリシー:

はユーザーpeterb=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