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

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

タグでマスキングポリシーを使用する方法の詳細については、 タグベースのマスキングポリシー をご参照ください。

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

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

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

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

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

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

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

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

使いやすさ:

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

データ管理と SoD:

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

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

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

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

データ共有:

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

変更管理:

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

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

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

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

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

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

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

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

権限

使用法

CREATE

スキーマで、新しいマスキングポリシーを作成できるようにします。

APPLY

列の マスキングポリシー に対する設定解除および設定の操作を実行できるようにします。

APPLY MASKING POLICY グローバル権限(つまり、 ACCOUNT の APPLY MASKING POLICY)を付与すると、テーブルとビューで DESCRIBE 操作を実行できることに注意してください。

構文例については、 マスキングポリシー権限 をご参照ください。

OWNERSHIP

マスキングポリシーに対する包括的な制御を付与します。マスキングポリシーのほとんどのプロパティを変更するために必要です。特定のオブジェクトに対して一度にこの権限を保持できるのは、1つのロールのみです。

注釈

マスキングポリシー上で動作するには、親データベースおよび親スキーマでの 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権限があることを確認します。

次のトピック: