ダイナミックデータマスキングについて

このトピックでは、ダイナミックデータマスキング機能の概要について説明します。

ダイナミックデータマスキングとは

ダイナミックデータマスキングは、マスキングポリシーを使用してクエリ時にテーブルとビューの列のプレーンテキストデータを選択的にマスクする、列レベルのセキュリティ機能です。

Snowflakeでは、マスキングポリシーはスキーマレベルのオブジェクトです。つまり、マスキングポリシーを列に適用する前に、Snowflakeにデータベースとスキーマが存在している必要があります。現在、Snowflakeは、テーブルとビューでの動的データマスキングの使用をサポートしています。

クエリの実行時に、マスキングポリシーは、列が表示されるすべての場所で列に適用されます。マスキングポリシーの条件、 SQL 実行コンテキスト、およびロール階層に応じて、Snowflakeクエリオペレーターは、プレーンテキスト値、部分的にマスクされた値、または完全にマスクされた値を表示する場合があります。

クエリ実行時の動作、ポリシーの作成、テーブルとビューでの使用、マスキングポリシーを使用した管理アプローチなど、マスキングポリシーの仕組みの詳細については、 列レベルのセキュリティについて をご参照ください。

SQL 実行コンテキストとロール階層の影響の詳細については、 高度な列レベルのセキュリティトピック をご参照ください。

ダイナミックデータマスキングの利点

以下は、ダイナミックデータマスキングの主な利点のいくつかをまとめたものです。

使いやすさ

ポリシーを1回記述して、データベースやスキーマ全体の数千の列に適用することができます。

データ管理と SoD

セキュリティまたはプライバシー担当者は、オブジェクト所有者ではなく、保護する列を決定します。マスキングポリシーは管理が容易であり、集中管理モデルと分散管理モデルをサポートします。

データの認証とガバナンス

ロールまたはカスタム資格によるコンテキストデータアクセス。

セキュリティまたはプライバシー担当者が実装するデータガバナンスをサポートし、 ACCOUNTADMIN または SECURITYADMIN のロールを持つ権限ユーザーがデータを不必要に表示することを禁止できます。

データ共有

共有する前にデータを簡単にマスクします。

変更管理

何千もの列にマスキングポリシーを再適用する必要なく、マスキングポリシーの内容を簡単に変更できます。

動的データマスキングと外部トークン化の利点の比較については、 列レベルのセキュリティの利点 をご参照ください。

ダイナミックデータマスキングの制限

制限の概要については、 列レベルのセキュリティ制限 をご参照ください。

ダイナミックデータマスキングの考慮事項

追加のダイナミックデータマスキングに関する考慮事項については、 列レベルのセキュリティに関する考慮事項 をご参照ください。

ダイナミックデータマスキングの権限

次のテーブルは、ダイナミックデータマスキングに関連する権限をまとめたものです。

権限

使用法

APPLY

マスキングポリシーのポリシーの設定操作または設定解除操作を適用し、テーブルとビューで DESCRIBE 操作を実行できるようにします。

OWNERSHIP

マスキングポリシーの完全な制御を許可するマスキングポリシーの所有権を譲渡します。マスキングポリシーのほとんどのプロパティを変更するために必要です。

注釈

マスキングポリシー上で動作するには、親データベースとスキーマでの USAGE 権限も必要です。

ダイナミックデータマスキングDDL

Snowflakeは、ダイナミックデータマスキングポリシーを管理するための以下のコマンドセットを提供します。

ダイナミックデータマスキングの監査

Snowflakeは、マスキングポリシーに固有の2つのAccount Usageビューを提供します。

  • MASKING_POLICIES は、Snowflakeアカウント内にあるすべてのマスキングポリシーのリストを提供します。

  • POLICY_REFERENCES は、マスキングポリシーが設定されているすべてのオブジェクトのリストを提供します。

Information Schemaテーブル関数 POLICY_REFERENCES は、次のいずれかに使用できます。

  • 列でマスキングポリシーが設定されているすべてのオブジェクト(つまり、テーブル、ビュー)のリストを返します。

  • 指定されたオブジェクト名とオブジェクト型を持つポリシー関連付けのリストを返します。

Snowflakeは、ユーザーが実行した元のクエリを 履歴ページ (ウェブインターフェイス内)に記録します。クエリは SQL Text 列にあります。

特定のクエリで使用されたマスキングポリシー名は、 クエリプロファイル にあります。

現在、クエリ履歴はAccount Usage QUERY_HISTORY ビューのみに固有です。このビューの Query Text 列には、 SQL ステートメントのテキストが含まれています。マスキングポリシー名は、 QUERY_HISTORY ビューに含まれていません。

ダイナミックデータマスキングのトラブルシューティング

エラーメッセージを使用して、マスキングポリシーの問題のトラブルシューティングに役立てることができます。

エラーメッセージ

次のテーブルは、マスキングポリシーの使用中にSnowflakeが返す可能性があるエラーメッセージを示しています。

動作

エラーメッセージ

トラブルシューティングアクション

Snowflake機能にマスキングポリシーを適用できない。

サポート対象外機能 CREATE ON MASKING POLICY COLUMN

現在、マスキングポリシーはこの機能には適用されません。

アクティブなロールが、マスキングポリシーを作成または置き換えることができない。

SQLアクセス制御エラー: アカウント <アカウント名> を操作するには権限が不十分です

grant create masking policy on account to role <role_name>; を使用して指定のロールにCREATE MASKING POLICY権限を付与します。 . show grants to role <role_name> を使用して、ロールに権限が付与されていることを確認し、CREATE OR REPLACE マスキングステートメントを再試行します。

特定のロールが、マスキングポリシーをテーブルに添付できない。

SQLコンパイルエラー: データベース <データベース名> が存在しないか、権限がありません。

grant apply masking policy on account to role <role_name>; を使用して、ロールにAPPLY MASKING POLICY権限を付与します

テーブルのマスキングポリシーを所有していない特定のロールが、使用できるテーブルにマスキングポリシーを適用しようとする。

SQLコンパイルエラー: マスキングポリシー <ポリシー名> が存在しないか、権限がありません。

grant apply on masking policy <policy_name> to role <role_name>; を使用して、特定のロールのマスキングポリシーの使用を許可します

drop masking policy <policy_name>; を使用して、ポリシーのドロップまたは削除ができない

SQL コンパイルエラー: ポリシー <ポリシー名> は1つ以上のエンティティに関連付けられているため、ドロップまたは置き換えができません。

ALTER TABLE ... MODIFY COLUMN または ALTER VIEW ... MODIFY COLUMN ステートメントを使用して、最初にポリシーを UNSET し、次に DROP ステートメントを再試行します。

ドロップされたテーブルを復元すると、マスキングポリシーエラーが発生する。

SQL実行エラー: 列 <列名> は、存在しないマスキングポリシーにすでに添付されています。ポリシー管理者に連絡してください。

ALTER テーブル/ビュー MODIFY COLUMN ステートメントで、現在添付されているマスキングポリシーの設定を解除し、CREATE OR REPLACE ステートメントでマスキングポリシーを列に再適用します。

マスキングポリシーを特定の列に適用することはできないが、別の列には適用できる。

指定された列は、既に別のマスキングポリシーに添付されています。列は、複数のマスキングポリシーに添付できません。新しいマスキングポリシーを添付するために、現在の関連付けを削除してください。

列に適用するマスキングポリシーを決定し、更新し、再試行します。

ALTER ステートメントを使用したポリシーの更新が失敗する。

SQLコンパイルエラー: マスキングポリシー <ポリシー名> が存在しないか、権限がありません。

show masking policies; を実行して、ALTER コマンドのポリシー名が既存のポリシーと一致することを確認します

クローンされたテーブルを所有するロールが、マスキングポリシーの設定を解除できない。

SQLアクセス制御エラー: ALTER TABLE UNSET MASKING POLICY「<ポリシー名>」を操作するには権限が不十分です

grant apply on masking policy <policy_name> to role <role_name>; . を使用して、クローンされたテーブルを所有するロールにAPPLY権限を付与します。 show grants to role <role_name>; を使用して、クローンされたテーブルを所有するロールが権限を付与されていることを確認し、ALTERステートメントを再試行します。

IF EXISTS を使用してポリシーを更新すると、正常な結果が返されるが、ポリシーが更新されない。

エラーメッセージは返されません。Snowflakeは正常に実行されたステートメントを返します。

IF EXISTS を ALTER ステートメントから削除して、再試行してください。

マスキングポリシーを作成するか、または CASE と置き換えているとき、データ型が一致しない(例:(VAL 文字列) -> が数値を返す)。

SQLコンパイルエラー: マスキングポリシー関数の引数と戻り値の型が一致しません。

CREATE OR REPLACEステートメントまたはALTER MASKING POLICYステートメントでCASEを使用してデータ型を一致させ、マスキングポリシーを更新します。

仮想列にマスキングポリシーを適用する。

SQLコンパイルエラー: マスキングポリシーをVIRTUAL_COLUMN列に添付できません。

ソーステーブルの列にマスキングポリシーを適用します。

マテリアライズドビューにマスキングポリシーを適用する。

SQLコンパイルエラー: <数字> 行のポジション <数字> で構文エラー、予期しない「変更」があります。 . SQLコンパイルエラー: エラー行 <数字> のポジション <数字> に無効な識別子「<文字>」があります。 . SQL実行エラー: テーブルに1つ以上のマテリアライズドビューがあります。mvsの数=<数>、テーブル名=<テーブル名>。

ソーステーブルの列にマスキングポリシーを適用します。詳細については、 制限事項 をご参照ください。

マテリアライズドビューの作成に使用されるテーブル列にマスキングポリシーを適用します。

SQL コンパイルエラー: マスキングポリシーは MATERIALIZED_VIEW 列に添付できません。

マスキングポリシーをテーブル列に適用するには、マテリアライズドビューをドロップします。

マテリアライズドビューの作成中にマスクされた列を含めます。

サポート対象外機能「CREATE ON MASKING POLICY COLUMN」。

マスクされた列を含めずにマテリアライズドビューを作成してから、 または ベーステーブルかビューにマスキングポリシーを設定せずに、マテリアライズドビューを作成してから、マテリアライズドビューの列にマスキングポリシーを適用します。

マスキングポリシー本体にユーザー定義関数(UDF)を使用してマスキングポリシーを作成できない。

SQLアクセス制御エラー: 関数「<udf名>」を操作するには権限が不十分です

マスキングポリシーを作成するロールに、UDFに対するUSAGE権限があることを確認します。

次のトピック: