ALTER MASKING POLICY¶
既存のマスキングポリシールールを新しいルールまたは新しいコメントで置き換え、マスキングポリシーの名前を変更できるようにします。
ポリシールールに加えられた変更は、マスキングポリシーを使用する次の SQL クエリが実行されるときに有効になります。
- こちらもご参照ください。
構文¶
ALTER MASKING POLICY [ IF EXISTS ] <name> RENAME TO <new_name>
ALTER MASKING POLICY [ IF EXISTS ] <name> SET BODY -> <expression_on_arg_name_to_mask>
ALTER MASKING POLICY [ IF EXISTS ] <name> SET TAG <tag_name> = '<tag_value>' [ , <tag_name> = '<tag_value>' ... ]
ALTER MASKING POLICY [ IF EXISTS ] <name> UNSET TAG <tag_name> [ , <tag_name> ... ]
ALTER MASKING POLICY [ IF EXISTS ] <name> SET COMMENT = '<string_literal>'
ALTER MASKING POLICY [ IF EXISTS ] <name> UNSET COMMENT
パラメーター¶
name
マスキングポリシーの識別子。ポリシーの親スキーマで一意である必要があります。
識別子の値はアルファベットで始まる必要があり、識別子文字列全体が二重引用符で囲まれていない限り、スペースや特殊文字を含めることはできません(例:
"My object"
)。二重引用符で囲まれた識別子も大文字と小文字が区別されます。詳細については、 識別子の要件 をご参照ください。
RENAME TO new_name
マスキングポリシーの新しい識別子を指定します。スキーマに対して一意である必要があります。識別子が別のマスキングポリシーにすでに配置されている場合、新しい識別子は使用できません。
詳細については、 識別子の要件 をご参照ください。
オプションでオブジェクトの名前を変更して、オブジェクトを別のデータベースやスキーマに移動できます。これを実行するには、新しいデータベース名やスキーマ名をそれぞれ
db_name.schema_name.object_name
またはschema_name.object_name
の形式で含む、修飾されたnew_name
値を指定します。注釈
宛先データベースやスキーマはすでに存在している必要があります。また、同じ名前のオブジェクトが宛先データベースにすでに存在することはできません。存在する場合、ステートメントはエラーを返します。
オブジェクトをマネージドアクセススキーマに移動することは、オブジェクトの所有者(つまり、オブジェクトに対して OWNERSHIP 権限を持つロール)がターゲットスキーマも所有している場合を 除き 禁止されています。
SET ...
マスキングポリシーに設定する1つ(または複数)のプロパティを指定します。
BODY -> expression_on_arg_name_to_mask
arg_name_mask
で指定された列のデータを変換する SQL 式。式には、 条件式関数 を含めて条件付きロジック、組み込み関数を表すか、 UDFs を含めてデータを変換することができます。
UDFs と外部関数の場合:
ポリシーの所有者(ポリシーに対する OWNERSHIP 権限を持つロール)には、 UDF または外部関数の USAGE 権限が必要です。UDF または外部関数に対する USAGE 権限は、マスキングポリシーが適用されている列のクエリに使用されるロールには必要ありません。
これらのいずれかの関数が条件付きマスキングポリシー本体内で使用されている場合、ポリシーの所有者に UDF または外部関数に対する OWNERSHIP 権限が必要です。条件付きマスキングポリシーが適用されている列をクエリするユーザーは、 UDF または外部関数に USAGE を持っている必要はありません。
ポリシー
body
のコンテキスト関数の場合:ポリシーが CURRENT_DATABASE または CURRENT_SCHEMA 関数を呼び出すとき、関数は、 USE <オブジェクト> コマンドで指定した、または Snowsight のコンテキストセレクターで選択したセッションのデータベースまたはスキーマではなく、保護されたテーブルまたはビューを含むデータベースまたはスキーマに対して評価されます。
TAG tag_name = 'tag_value' [ , tag_name = 'tag_value' , ... ]
タグ の名前とタグ文字列の値を指定します。
タグ値は常に文字列であり、タグ値の最大文字数は256です。
ステートメントにあるタグの指定の詳細については、 オブジェクトおよび列のタグクォータ をご参照ください。
COMMENT = 'string_literal'
マスキングポリシーのコメントを追加するか、既存のコメントを上書きします。
デフォルト: 値なし
UNSET ...
マスキングポリシーの設定を解除する1つまたは複数のプロパティ、パラメーター、またはその両方を指定します。これにより、これらはデフォルトにリセットされます。
TAG tag_name [ , tag_name ... ]
COMMENT
プロパティ/パラメーターをリセットするときは、名前のみを指定します。プロパティの値を指定すると、エラーが返されます。
アクセス制御の要件¶
この SQL コマンドの実行に使用される ロール には、少なくとも次の 権限 が必要です。
権限 |
オブジェクト |
メモ |
---|---|---|
OWNERSHIP |
マスキングポリシー |
OWNERSHIP is a special privilege on an object that is automatically granted to the role that created the object, but can also be transferred using the GRANT OWNERSHIP command to a different role by the owning role (or any role with the MANAGE GRANTS privilege). |
スキーマ内の任意のオブジェクトを操作するには、親データベースとスキーマに対する USAGE 権限も必要であることに注意してください。
指定された権限のセットを使用してカスタムロールを作成する手順については、 カスタムロールの作成 をご参照ください。
セキュリティ保護可能なオブジェクト に対して SQL アクションを実行するためのロールと権限付与に関する一般的な情報については、 アクセス制御の概要 をご参照ください。
マスキングポリシー DDL と権限の詳細については、 列レベルのセキュリティの管理 をご参照ください。
使用上の注意¶
既存のマスキングポリシーを更新するために、ポリシーの現在の定義を確認する必要がある場合は、 GET_DDL 関数を呼び出すか、 DESCRIBE MASKING POLICY コマンドを実行します。
ポリシーの署名(つまり、引数名または入出力データ型)を変更することはできません。署名を変更する必要がある場合は、ポリシーで DROP MASKING POLICY ステートメントを実行し、新しいステートメントを作成します。
ALTER ステートメントを実行する前に、 DESCRIBE MASKING POLICY ステートメントを実行して、ポリシーの更新に使用する引数名を決定できます。
マスキングポリシー本文にサブクエリを含むマスキングポリシーの場合は、 WHEN 句で EXISTS を使用します。代表的な例については、 CREATE MASKING POLICY の「例」セクションにある、カスタム資格テーブルの例をご参照ください。
列が行アクセスポリシーによって参照されている場合は、列へのマスキングポリシーの追加に失敗します。詳細については、 ALTER ROW ACCESS POLICY をご参照ください。
マスキングポリシーで UDF を使用する場合は、列、 UDF、およびマスキングポリシーのデータ型が一致していることを確認します。詳細については、 マスキングポリシー内のユーザー定義関数 をご参照ください。
メタデータについて。
注意
Snowflakeサービスを使用する場合、お客様は、個人データ(ユーザーオブジェクト向け以外)、機密データ、輸出管理データ、またはその他の規制されたデータがメタデータとして入力されていないことを確認する必要があります。詳細については、 Snowflakeのメタデータフィールド をご参照ください。
例¶
次の例では、 SHA-512ハッシュを使用するようにマスキングポリシーを更新します。ANALYST のロールを持たないユーザーには、値が SHA-512ハッシュとして表示されますが、 ANALYST のロールを持つユーザーには、平文の値が表示されます。
DESCRIBE MASKING POLICY email_mask;
+-----+------------+---------------+-------------------+-----------------------------------------------------------------------+
| Row | name | signature | return_type | body |
+-----+------------+---------------+-------------------+-----------------------------------------------------------------------+
| 1 | EMAIL_MASK | (VAL VARCHAR) | VARCHAR(16777216) | case when current_role() in ('ANALYST') then val else '*********' end |
+-----+------------+---------------+-------------------+-----------------------------------------------------------------------+
ALTER MASKING POLICY email_mask SET BODY ->
CASE
WHEN current_role() IN ('ANALYST') THEN VAL
ELSE sha2(val, 512)
END;