SQL を使用して機密データの分類を設定する¶
次のセクションでは、 SQL を使用してデータベース内の機密データの自動分類を設定する方法を説明します。ウェブインターフェイスを使用して機密データの分類を設定する場合は、 トラストセンターを使用して、機密データの分類を設定する をご参照ください。
SQL を使用して機密データを分類するための基本的なワークフローの手順は次のとおりです。
機密データの分類中に何が起こるかを制御する 分類プロファイル を作成します。
データベースまたはスキーマに分類プロファイルをセットして、エンティティ内のテーブルが自動的に分類されるようにします。
このワークフローのエンドツーエンドの例については、 例 を参照してください。
分類プロファイルについて¶
分類プロファイルは、データベース内のテーブルを自動的に分類するために使用される基準を定義します。この基準には以下が含まれます。
テーブルが自動的に分類されるまでに存在すべき期間。
過去に分類されたテーブルが再分類されるまでの期間。
システムタグとカスタムタグを分類後の列に自動的にセットするかどうか。提案されたタグをSnowflakeで自動的に適用させるか、提案されたタグの割り当てを確認してから自分で適用するかを決めることができます。
システム分類タグとユーザー定義オブジェクトタグ間の マッピング によりユーザー定義タグを自動的に適用できるようにします。
データを分類するために :doc:` カスタム分類子 </user-guide/classify-custom>` を使用するかどうか。
データエンジニアがデータベースに分類プロファイルを割り当てると、そのデータベースに属するテーブル内の機密データは、プロファイルで定義されたスケジュールで自動的に分類されます。データエンジニアは、複数のデータベースに同じ分類プロファイルを割り当てることができます。また、データベースごとに異なる分類基準をセットするために、複数の分類プロファイルを作成することもできます。
SQL を使用して分類プロファイルを作成するには、 CREATE CLASSIFICATION_PROFILE コマンドを実行し CLASSIFICATION_PROFILE :doc:` クラス </sql-reference/snowflake-db-classes>` のインスタンスを作成します。
CREATE CLASSIFICATION_PROFILE コマンドを使用して分類プロファイルを作成する例については、 例 をご参照ください。
タグマッピングについて¶
分類プロファイルを使用して、 SEMANTIC_CATEGORY システムタグ を、1つまたは複数の オブジェクトタグ にマッピングすることができます。このタグマッピングを使用すると、機密データを含む列に、その分類に基づいてユーザー定義タグが自動的に割り当てられます。タグマップは、分類プロファイルの作成時に追加することも、後で <分類プロファイル名>!SET_TAG_MAP メソッドを呼び出すことによって追加することもできます。
分類プロファイルの作成時にタグマップを定義する場合でも、作成後にタグマップを定義する場合でも、マップの内容は JSON オブジェクトとして指定されます。この JSON オブジェクトには、 'column_tag_map' キーが含まれます。このキーは、ユーザー定義タグ、そのタグの文字列値、およびタグがマッピングされるセマンティックカテゴリを指定するオブジェクトの配列です。
以下はタグマップの例です。
'tag_map': {
'column_tag_map': [
{
'tag_name':'tag_db.sch.pii',
'tag_value':'Highly Confidential',
'semantic_categories':[
'NAME',
'NATIONAL_IDENTIFIER'
]
},
{
'tag_name': 'tag_db.sch.pii',
'tag_value':'Confidential',
'semantic_categories': [
'EMAIL'
]
}
]
}
このマッピングに基づき、メールアドレスの列があり、分類プロセスでその列にこれらのアドレスが含まれていると判断された場合、 tag_db.sch.pii = 'Confidential' タグがメールアドレスを含む列にセットされます。
タグマップが、タグ、タグ値、およびカテゴリ値をマップする複数の JSON オブジェクトを含む場合、 JSON オブジェクトの順序は、競合がある場合に列にセットされるタグと値を決定します。JSON オブジェクトを、左から右へ、または JSON を形式化する場合は上から下へ、希望する割り当て順で指定します。
Tip
column_tag_map フィールドの各オブジェクトには、必須キーが1つだけあります: tag_name。tag_value と semantic_categories キーを省略した場合、ユーザー定義のタグはSEMANTIC_CATEGORYシステムタグが適用されているすべての列に適用されるため、ユーザー定義のタグの値が指定された列のSEMANTIC_CATEGORYタグの値と一致します。
手動で割り当てられたタグと自動分類で適用されたタグが競合すると、エラーが発生します。これらのエラーのトラッキングについては、 機密データ分類のトラブルシューティング をご覧ください。
データベースへの分類プロファイルのセット¶
データベースに分類プロファイルをセットすることで、機密データの分類を実装します。データベースに分類プロファイルをセットすると、そのデータベース内のすべてのテーブルとビューは、機密データ分類によって自動的に監視されます。
スキーマに分類を設定することもできます。分類プロファイルにも関連付けられているデータベース内に存在するスキーマに分類プロファイルを設定すると、スキーマに設定されたプロファイルがデータベースに設定されたプロファイルを上書きします。
分類プロファイルをセットするには、 ALTER DATABASE または /sql-reference/sql/alter-schema`コマンドを使用して CLASSIFICATION_PROFILE パラメーターをセットします。たとえば、分類プロファイル ``my_profile` を my_db データベースのすべてのテーブルとビューが機密データ分類によって監視されるようにセットするには、次のコマンドを実行します。
ALTER DATABASE my_db
SET CLASSIFICATION_PROFILE = 'governance_db.classify_sch.my_profile';
アクセス制御¶
分類プロファイルを操作し、機密データの分類を有効にする権限とロールを次に示します。
タスク |
必要な権限/ロール |
注意 |
|---|---|---|
分類プロファイルの作成 |
SNOWFLAKE.CLASSIFICATION_ADMIN データベースロール |
このデータベースロールを他のロールに付与する情報については、 SNOWFLAKE データベースロールの使用 を参照してください。 |
スキーマのCREATE SNOWFLAKE.DATA_PRIVACY.CLASSIFICATION_PROFILE |
分類プロファイルインスタンスを作成するスキーマで、この権限が必要です。 |
|
データベースとスキーマの USAGE |
分類プロファイルインスタンスを作成するスキーマについての権限が必要です。 |
|
データベース/スキーマへの分類プロファイルのセット |
次のいずれかを使用します。
|
デフォルトでは、データベース/スキーマの所有者は、EXECUTEAUTOCLASSIFICATION 権限を持っています。 |
スキーマのデータベースに対する権限 |
スキーマに分類プロファイルをセットする場合は、そのスキーマを含むデータベースに対して少なくとも1つの権限が必要です。 |
|
データベース/スキーマに対する権限 |
自動分類したいテーブルを含むデータベース/スキーマに対して、少なくとも1つの権限が必要です。EXECUTEAUTOCLASSIFICATION 権限は、この要件を満たします。 |
|
次のいずれかを使用します。
|
PRIVACY_USERインスタンスロールを他のロールに付与する方法については、 インスタンスロール をご覧ください。 |
|
アカウントにおける APPLY TAG |
||
分類プロファイルインスタンスで メソッド を呼び出します |
<classification_profile>!PRIVACY_USER インスタンスロール |
このインスタンスロールを他のロールに付与する情報については、 インスタンスロール を参照してください。 |
分類プロファイルのリスト |
<classification_profile>!PRIVACY_USER インスタンスロール |
|
分類プロファイルのドロップ |
分類プロファイルインスタンスにおける OWNERSHIP |
データエンジニアのロールにこれらの権限とデータベースロールを付与する例については、 基本的な例: データベース内のテーブルの自動分類 を参照してください。
例¶
基本的な例: データベース内のテーブルの自動分類¶
データベース内のテーブルを自動的に分類するには、以下の手順を実行します。
管理者として、データエンジニアに、データベース内のテーブルを自動的に分類するために必要な ロールと権限 を与えます。
USE ROLE ACCOUNTADMIN; GRANT USAGE ON DATABASE mydb TO ROLE data_engineer; GRANT EXECUTE AUTO CLASSIFICATION ON DATABASE mydb TO ROLE data_engineer; GRANT DATABASE ROLE SNOWFLAKE.CLASSIFICATION_ADMIN TO ROLE data_engineer; GRANT CREATE SNOWFLAKE.DATA_PRIVACY.CLASSIFICATION_PROFILE ON SCHEMA mydb.sch TO ROLE data_engineer; GRANT APPLY TAG ON ACCOUNT TO ROLE data_engineer;
データエンジニアのロールに切り替えます。
USE ROLE data_engineer;
CLASSIFICATION_PROFILE クラスのインスタンスとして、 分類プロファイルを作成 します。
CREATE OR REPLACE SNOWFLAKE.DATA_PRIVACY.CLASSIFICATION_PROFILE my_classification_profile( { 'minimum_object_age_for_classification_days': 0, 'maximum_classification_validity_days': 30, 'auto_tag': true, 'classify_views': true });
インスタンスに対して DESCRIBE メソッドを呼び出し、そのプロパティを確認します。
SELECT my_classification_profile!DESCRIBE();
スキーマに分類プロファイルインスタンスをセットすると、スキーマ内のテーブルを監視し、機密データかどうかを自動的に分類するバックグラウンドプロセスが開始されます。
ALTER DATABASE mydb SET CLASSIFICATION_PROFILE = 'mydb.sch.my_classification_profile';
注釈
スキーマに分類プロファイルをセットしてから、Snowflakeがスキーマの分類を開始するまで、1時間の遅延があります。
1時間待ってから、 SYSTEM$GET_CLASSIFICATION_RESULT ストアドプロシージャを呼び出し、自動分類の結果を取得してください。
CALL SYSTEM$GET_CLASSIFICATION_RESULT('mydb.sch.t1');
例: タグマップとカスタム分類子の使用¶
管理者として、データエンジニアに、データベース内のテーブルを自動的に分類し、列にタグをセットするために必要な ロールと権限 を与えます。
分類プロファイルを作成します。
CREATE OR REPLACE SNOWFLAKE.DATA_PRIVACY.CLASSIFICATION_PROFILE my_classification_profile( { 'minimum_object_age_for_classification_days': 0, 'maximum_classification_validity_days': 30, 'auto_tag': true, 'classify_views': true });
インスタンスの SET_TAG_MAP メソッドを呼び出して、 タグマップ を分類プロファイルに追加します。これにより、機密データを含む列にカスタムタグを自動的に適用することができます。
CALL my_classification_profile!SET_TAG_MAP( {'column_tag_map':[ { 'tag_name':'my_db.sch1.pii', 'tag_value':'sensitive', 'semantic_categories':['NAME'] }]});
あるいは、分類プロファイルを作成するときに、このタグマップを追加することもできます。
SET_CUSTOM_CLASSIFIERS メソッドを呼び出して、 カスタム分類子 を分類プロファイルに追加します。これにより、機密データをユーザー定義のセマンティックカテゴリとプライバシーカテゴリで自動的に分類することができます。
CALL my_classification_profile!set_custom_classifiers( { 'medical_codes': medical_codes!list(), 'finance_codes': finance_codes!list() });
または、分類プロファイルの作成時にカスタム分類子を追加することもできます。
インスタンスの DESCRIBE メソッドを呼び出して、タグマップとカスタム分類子が分類プロファイルに追加されたことを確認します。
SELECT my_classification_profile!DESCRIBE();
データベースに分類プロファイルインスタンスをセットします。
ALTER DATABASE mydb SET CLASSIFICATION_PROFILE = 'mydb.sch.my_classification_profile';
tag_db.sch.piiタグにマスキングポリシーをアタッチして、タグベースのマスキングを有効にします。ALTER TAG tag_db.sch.pii SET MASKING POLICY pii_mask;
例: 自動分類を有効にする前の分類プロファイルのテスト¶
管理者として、データエンジニアに、スキーマ内のテーブルを自動的に分類し、列にタグをセットするために必要な ロールと権限 を与えます。
タグマップとカスタム分類子を使用して分類プロファイルを作成します。
CREATE OR REPLACE SNOWFLAKE.DATA_PRIVACY.CLASSIFICATION_PROFILE my_classification_profile( { 'minimum_object_age_for_classification_days':0, 'auto_tag':true, 'tag_map': { 'column_tag_map':[ { 'tag_name':'tag_db.sch.pii', 'tag_value':'highly sensitive', 'semantic_categories':['NAME','NATIONAL_IDENTIFIER'] }, { 'tag_name':'tag_db.sch.pii', 'tag_value':'sensitive', 'semantic_categories':['EMAIL','MEDICAL_CODE'] } ] }, 'classify_views': true 'custom_classifiers': { 'medical_codes': medical_codes!list(), 'finance_codes': finance_codes!list() } } );
自動分類を有効にする前に、 SYSTEM$CLASSIFY ストアドプロシージャを呼び出して、
table1テーブルのタグマッピングをテストします。CALL SYSTEM$CLASSIFY( 'db.sch.table1', 'db.sch.my_classification_profile' );
出力の
tagsキーには、タグがセットされたかどうかの詳細(セットされていればtrue、そうでなければfalse)、セットされたタグの名前、タグの値が含まれます。{ "classification_profile_config": { "classification_profile_name": "db.schema.my_classification_profile" }, "classification_result": { "EMAIL": { "alternates": [], "recommendation": { "confidence": "HIGH", "coverage": 1, "details": [], "privacy_category": "IDENTIFIER", "semantic_category": "EMAIL", "tags": [ { "tag_applied": true, "tag_name": "snowflake.core.semantic_category", "tag_value": "EMAIL" }, { "tag_applied": true, "tag_name": "snowflake.core.privacy_category", "tag_value": "IDENTIFIER" }, { "tag_applied": true, "tag_name": "tag_db.sch.pii", "tag_value": "sensitive" } ] }, "valid_value_ratio": 1 }, "FIRST_NAME": { "alternates": [], "recommendation": { "confidence": "HIGH", "coverage": 1, "details": [], "privacy_category": "IDENTIFIER", "semantic_category": "NAME", "tags": [ { "tag_applied": true, "tag_name": "snowflake.core.semantic_category", "tag_value": "NAME" }, { "tag_applied": true, "tag_name": "snowflake.core.privacy_category", "tag_value": "IDENTIFIER" }, { "tag_applied": true, "tag_name": "tag_db.sch.pii", "tag_value": "highly sensitive" } ] }, "valid_value_ratio": 1 } } }
分類プロファイルに基づく自動分類が望ましい結果をもたらすことを確認したら、データベースに分類プロファイルインスタンスをセットします。
ALTER DATABASE mydb SET CLASSIFICATION_PROFILE = 'mydb.sch.my_classification_profile';