CREATE JOIN POLICY¶
現在のスキーマ/指定されたスキーマで新しい 結合ポリシー を作成するか、既存の結合ポリシーを置き換えます。
結合ポリシーを作成したら、 ALTER TABLE コマンドを使用してポリシーをテーブルに、または ALTER VIEW コマンドを使用してポリシーをビューに割り当てます。あるいは、テーブル作成時に結合ポリシーを割り当てることもできます。
- こちらもご参照ください。
構文¶
CREATE [ OR REPLACE ] JOIN POLICY [ IF NOT EXISTS ] <name>
AS () RETURNS JOIN_CONSTRAINT -> <body>
[ COMMENT = '<string_literal>' ]
パラメーター¶
name
結合ポリシーの識別子。スキーマに対して一意にする必要があります。
また、識別子はアルファベット文字で始まる必要があり、識別子文字列全体が二重引用符で囲まれていない限り、スペースや特殊文字を含めることはできません(例:
"My object"
)。二重引用符で囲まれた識別子も大文字と小文字が区別されます。詳細については、 識別子の要件 をご参照ください。
AS () RETURNS JOIN_CONSTRAINT
ポリシーの署名と戻り型署名は引数を受け入れず、戻り型は内部データ型である JOIN_CONSTRAINT です。すべての結合ポリシーには同じ署名と戻り型があります。
body
結合ポリシーの制限を決定する SQL 式。
結合ポリシーの本文を定義するには、 TRUE または FALSE を返す JOIN_CONSTRAINT 関数を呼び出します。関数が TRUE を返す場合、クエリは結果を返すために結合を使用する必要があります。
JOIN_CONSTRAINT 関数の構文は次のとおりです。
JOIN_CONSTRAINT ( { JOIN_REQUIRED => <boolean_expression> } )
条件:
JOIN_REQUIRED => boolean_expression
クエリで結合ポリシーが割り当てられているテーブル、またはビューからデータを選択するときに、結合が必要かどうかを指定します。
ポリシーの本文では、ユーザー定義の関数、テーブル、ビューを参照することはできません。
許可される結合列は、 CREATE JOIN POLICY ステートメントではなく、ポリシーが適用されるテーブルまたはビューの CREATE または ALTER ステートメントで指定されます。
COMMENT = 'string_literal'
結合ポリシーのコメントを追加するか、既存のコメントを上書きします。
アクセス制御の要件¶
この操作の実行に使用される ロール には、少なくとも次の 権限 が必要です。
権限 |
オブジェクト |
メモ |
---|---|---|
CREATE JOIN POLICY |
スキーマ |
スキーマ内のオブジェクトに対して操作を実行するには、親データベースとスキーマに対する USAGE 権限が必要です。
指定された権限のセットを使用してカスタムロールを作成する手順については、 カスタムロールの作成 をご参照ください。
セキュリティ保護可能なオブジェクト に対して SQL アクションを実行するためのロールと権限付与に関する一般的な情報については、 アクセス制御の概要 をご参照ください。
結合ポリシー DDL および権限に関する詳細情報については、 結合ポリシーの管理 をご参照ください。
使用上の注意¶
既存の結合ポリシーを更新し、現在のポリシー本文を確認する必要がある場合は、 DESCRIBE JOIN POLICY コマンドまたは GET_DDL 関数を実行します。
メタデータについて:
注意
Snowflakeサービスを使用する場合、お客様は、個人データ(ユーザーオブジェクト向け以外)、機密データ、輸出管理データ、またはその他の規制されたデータがメタデータとして入力されていないことを確認する必要があります。詳細については、 Snowflakeのメタデータフィールド をご参照ください。
例¶
クエリに結合を含めることを要求する結合ポリシーを作成します(ポリシーがそれらのクエリにあるテーブルとビューに適用される場合)。
CREATE JOIN POLICY jp1 AS () RETURNS JOIN_CONSTRAINT -> JOIN_CONSTRAINT(JOIN_REQUIRED => TRUE);
ACCOUNTADMIN ロールを持つユーザーが結合なしでクエリを実行できるように結合ポリシーを作成します。その他のユーザーは結合クエリを実行する必要があります。
CREATE JOIN POLICY jp2 AS () RETURNS JOIN_CONSTRAINT -> CASE WHEN CURRENT_ROLE() = 'ACCOUNTADMIN' THEN JOIN_CONSTRAINT(JOIN_REQUIRED => FALSE) ELSE JOIN_CONSTRAINT(JOIN_REQUIRED => TRUE) END;