Use SQL to set up sensitive data classification

次のセクションでは、 SQL を使用してデータベース内の機密データの自動分類を設定する方法を説明します。ウェブインターフェイスを使用して機密データの分類を設定する場合は、 トラストセンターを使用して、機密データの分類を設定する をご参照ください。

The basic workflow for using SQL to classify sensitive data consists of the following steps:

  1. Create a classification profile that controls what happens during sensitive data classification.

  2. Set the classification profile on a database or schema to automatically classify tables in the entity.

このワークフローのエンドツーエンドの例については、 を参照してください。

分類プロファイルについて

A classification profile defines the criteria that are used to automatically classify tables in a database. This criteria includes:

  • テーブルが自動的に分類されるまでに存在すべき期間。

  • 過去に分類されたテーブルが再分類されるまでの期間。

  • システムタグとカスタムタグを分類後の列に自動的にセットするかどうか。提案されたタグをSnowflakeで自動的に適用させるか、提案されたタグの割り当てを確認してから自分で適用するかを決めることができます。

  • システム分類タグとユーザー定義オブジェクトタグ間の マッピング によりユーザー定義タグを自動的に適用できるようにします。

  • データを分類するために :doc:` カスタム分類子 </user-guide/classify-custom>` を使用するかどうか。

When a data engineer assigns the classification profile to a database, sensitive data in the tables that belong to the database is automatically classified on the schedule defined by the profile. A data engineer can assign the same classification profile to multiple databases, or create multiple classification profiles to set different classification criteria for different databases.

To use SQL to create a classification profile, run the CREATE CLASSIFICATION_PROFILE command to create an instance of the CLASSIFICATION_PROFILE class.

For an example of using the CREATE CLASSIFICATION_PROFILE command to create a classification profile, see .

タグマッピングについて

You can use the classification profile to map SEMANTIC_CATEGORY system tags to one or more object tags. With this tag mapping, a column with sensitive data can be automatically assigned a user-defined tag based on its classification. The tag map can be added while creating the classification profile or later by calling the <分類プロファイル名>!SET_TAG_MAP method.

Regardless of whether you are defining the tag map while creating the classification profile or after, the contents of the map are specified as a JSON object. This JSON object contains the 'column_tag_map' key, which is an array of objects that specify a user-defined tag, the string value of that tag, and the semantic categories to which the tag is being mapped.

以下はタグマップの例です。

'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'
      ]
    }
  ]
}
Copy

このマッピングに基づき、メールアドレスの列があり、分類プロセスでその列にこれらのアドレスが含まれていると判断された場合、 tag_db.sch.pii = 'Confidential' タグがメールアドレスを含む列にセットされます。

タグマップが、タグ、タグ値、およびカテゴリ値をマップする複数の JSON オブジェクトを含む場合、 JSON オブジェクトの順序は、競合がある場合に列にセットされるタグと値を決定します。JSON オブジェクトを、左から右へ、または JSON を形式化する場合は上から下へ、希望する割り当て順で指定します。

Tip

column_tag_map フィールドの各オブジェクトには、必須キーが1つだけあります: tag_nametag_valuesemantic_categories キーを省略した場合、ユーザー定義のタグはSEMANTIC_CATEGORYシステムタグが適用されているすべての列に適用されるため、ユーザー定義のタグの値が指定された列のSEMANTIC_CATEGORYタグの値と一致します。

If there is a conflict with a manually assigned tag and a tag applied by automatic classification, an error occurs. For information about tracking these errors, see 機密データ分類のトラブルシューティング.

ネイティブセマンティックカテゴリのサブセットを使用してデータを分類

デフォルトでは、Snowflakeは機密データを識別するたびに、データを ネイティブセマンティックカテゴリ に分類します。セマンティックカテゴリは、メールアドレス、クレジットカード番号、社会保障番号などのデータの種類を表します。

分類プロファイルを構成して、機密として分類するデータの型(セマンティックカテゴリ)を制限することができます。Snowflakeは、プロファイルで指定したセマンティックカテゴリのサブセットに属している場合にのみデータを分類します。

分類プロファイルの構成オブジェクト内の snowflake_semantic_categories キーは、分類するセマンティックカテゴリのリストを定義します。分類するデータは、次の2つの方法で指定できます。

  • セマンティックカテゴリ別に分類:NAME または EMAIL などのカテゴリを指定して、場所に関係なくそのタイプのすべてのデータを分類します。

  • セマンティックカテゴリおよび国ごとに分類:国固有のサブカテゴリ(TAX_IDENTIFIER や PASSPORT など)を持つカテゴリの場合は、 country_codes キーを使用して特定の国のデータのみを分類できます。2文字の国コードとサポートされているセマンティックサブカテゴリのリストについては、 機密データ分類のネイティブセマンティックカテゴリ をご参照ください。

同じ分類プロファイルに両方のアプローチを組み合わせることができます。次の例は、各バリエーションを示しています。

例1:特定のセマンティックカテゴリを分類

この例では、Snowflakeがセマンティックカテゴリ NAME および NATIONAL_IDENTIFIER に属するものとして識別した場合にのみデータが分類されるように、分類プロファイルを構成します。他のすべてのタイプのデータは分類されません。

CREATE OR REPLACE SNOWFLAKE.DATA_PRIVACY.CLASSIFICATION_PROFILE
  my_classification_profile(
    {
      'minimum_object_age_for_classification_days': 0,
      'snowflake_semantic_categories':
        [
          {'category': 'NAME'},
          {'category': 'NATIONAL_IDENTIFIER'}
        ]
    });
Copy

例2:特定の国コードでカテゴリを分類する

国固有のサブカテゴリを持つセマンティックカテゴリについては、 country_codes キーを使用して分類を特定の国に制限できます。country_codes 値は2文字の国コードです。

この例では、Snowflakeがイタリア(IT)またはフランス(FR)の税識別子であることを識別する場合にのみ、データを分類します。

CREATE OR REPLACE SNOWFLAKE.DATA_PRIVACY.CLASSIFICATION_PROFILE
  my_classification_profile(
    {
      'minimum_object_age_for_classification_days': 0,
      'snowflake_semantic_categories':
        [
          {
            'category': 'TAX_IDENTIFIER',
            'country_codes': ['IT', 'FR']
          }
        ]
    });
Copy

例3:グローバルカテゴリと国固有のカテゴリを組み合わせる

国固有のサブカテゴリを持たないセマンティックカテゴリと、国固有のサブカテゴリを持つカテゴリを組み合わせることができます。この例では、Snowflakeが常に NAME カテゴリに属するデータを分類し、データが米国のパスポートに関係する場合は PASSPORT カテゴリを分類するように指定します。

CREATE OR REPLACE SNOWFLAKE.DATA_PRIVACY.CLASSIFICATION_PROFILE
  my_classification_profile(
    {
      'minimum_object_age_for_classification_days': 0,
      'snowflake_semantic_categories':
        [
          {
            'category': 'NAME'
          },
          {
            'category': 'PASSPORT',
            'country_codes': ['US']
          }
        ]
    });
Copy

データベースへの分類プロファイルのセット

Implement sensitive data classification by setting a classification profile on a database. After you set the classification profile on the database, all tables and views within that database are automatically monitored by sensitive data classification.

スキーマに分類を設定することもできます。分類プロファイルにも関連付けられているデータベース内に存在するスキーマに分類プロファイルを設定すると、スキーマに設定されたプロファイルがデータベースに設定されたプロファイルを上書きします。

To set a classification profile, use an ALTER DATABASE or ALTER SCHEMA command to set the CLASSIFICATION_PROFILE parameter. For example, to set a classification profile my_profile so all tables and views in the my_db database are monitored by sensitive data classification, run the following command:

ALTER DATABASE my_db
  SET CLASSIFICATION_PROFILE = 'governance_db.classify_sch.my_profile';
Copy

アクセス制御

Here are the privileges and roles that let you work with classification profiles and enable sensitive data classification.

タスク

必要な権限/ロール

注意

分類プロファイルの作成

SNOWFLAKE.CLASSIFICATION_ADMIN データベースロール

このデータベースロールを他のロールに付与する情報については、 SNOWFLAKE データベースロールの使用 を参照してください。

スキーマのCREATE SNOWFLAKE.DATA_PRIVACY.CLASSIFICATION_PROFILE

分類プロファイルインスタンスを作成するスキーマで、この権限が必要です。

データベースとスキーマの USAGE

分類プロファイルインスタンスを作成するスキーマについての権限が必要です。

データベース/スキーマへの分類プロファイルのセット

次のいずれかを使用します。

  • EXECUTE AUTO CLASSIFICATION(アカウント)

  • EXECUTEAUTOCLASSIFICATION(データベース/スキーマ)

デフォルトでは、データベース/スキーマの所有者は、EXECUTEAUTOCLASSIFICATION 権限を持っています。

スキーマのデータベースに対する権限

スキーマに分類プロファイルをセットする場合は、そのスキーマを含むデータベースに対して少なくとも1つの権限が必要です。

データベース/スキーマに対する権限

自動分類したいテーブルを含むデータベース/スキーマに対して、少なくとも1つの権限が必要です。EXECUTEAUTOCLASSIFICATION 権限は、この要件を満たします。

次のいずれかを使用します。

  • 分類プロファイルインスタンスのOWNERSHIP。

  • 分類プロファイルの<classification_profile>!PRIVACY_USERインスタンスロール。

PRIVACY_USERインスタンスロールを他のロールに付与する方法については、 インスタンスロール をご覧ください。

アカウントにおける APPLY TAG

分類プロファイルインスタンスで メソッド を呼び出します

<classification_profile>!PRIVACY_USER インスタンスロール

このインスタンスロールを他のロールに付与する情報については、 インスタンスロール を参照してください。

分類プロファイルのリスト

<classification_profile>!PRIVACY_USER インスタンスロール

分類プロファイルのドロップ

分類プロファイルインスタンスにおける OWNERSHIP

データエンジニアのロールにこれらの権限とデータベースロールを付与する例については、 基本的な例: データベース内のテーブルの自動分類 を参照してください。

基本的な例: データベース内のテーブルの自動分類

データベース内のテーブルを自動的に分類するには、以下の手順を実行します。

  1. 管理者として、データエンジニアに、データベース内のテーブルを自動的に分類するために必要な ロールと権限 を与えます。

    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;
    
    Copy
  2. データエンジニアのロールに切り替えます。

    USE ROLE data_engineer;
    
    Copy
  3. 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
        });
    
    Copy
  4. インスタンスに対して DESCRIBE メソッドを呼び出し、そのプロパティを確認します。

    SELECT my_classification_profile!DESCRIBE();
    
    Copy
  5. スキーマに分類プロファイルインスタンスをセットすると、スキーマ内のテーブルを監視し、機密データかどうかを自動的に分類するバックグラウンドプロセスが開始されます。

    ALTER DATABASE mydb
     SET CLASSIFICATION_PROFILE = 'mydb.sch.my_classification_profile';
    
    Copy

    注釈

    スキーマに分類プロファイルをセットしてから、Snowflakeがスキーマの分類を開始するまで、1時間の遅延があります。

  6. 1時間待ってから、 SYSTEM$GET_CLASSIFICATION_RESULT ストアドプロシージャを呼び出し、自動分類の結果を取得してください。

    CALL SYSTEM$GET_CLASSIFICATION_RESULT('mydb.sch.t1');
    
    Copy

例: タグマップとカスタム分類子の使用

  1. 管理者として、データエンジニアに、データベース内のテーブルを自動的に分類し、列にタグをセットするために必要な ロールと権限 を与えます。

  2. 分類プロファイルを作成します。

    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
        });
    
    Copy
  3. インスタンスの 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']
        }]});
    
    Copy

    あるいは、分類プロファイルを作成するときに、このタグマップを追加することもできます。

  4. SET_CUSTOM_CLASSIFIERS メソッドを呼び出して、 カスタム分類子 を分類プロファイルに追加します。これにより、機密データをユーザー定義のセマンティックカテゴリとプライバシーカテゴリで自動的に分類することができます。

    CALL my_classification_profile!set_custom_classifiers(
      {
        'medical_codes': medical_codes!list(),
        'finance_codes': finance_codes!list()
      });
    
    Copy

    または、分類プロファイルの作成時にカスタム分類子を追加することもできます。

  5. インスタンスの DESCRIBE メソッドを呼び出して、タグマップとカスタム分類子が分類プロファイルに追加されたことを確認します。

    SELECT my_classification_profile!DESCRIBE();
    
    Copy
  6. データベースに分類プロファイルインスタンスをセットします。

    ALTER DATABASE mydb
     SET CLASSIFICATION_PROFILE = 'mydb.sch.my_classification_profile';
    
    Copy
  7. tag_db.sch.pii タグにマスキングポリシーをアタッチして、タグベースのマスキングを有効にします。

    ALTER TAG tag_db.sch.pii SET MASKING POLICY pii_mask;
    
    Copy

例: 自動分類を有効にする前の分類プロファイルのテスト

  1. 管理者として、データエンジニアに、スキーマ内のテーブルを自動的に分類し、列にタグをセットするために必要な ロールと権限 を与えます。

  2. タグマップとカスタム分類子を使用して分類プロファイルを作成します。

    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()
        }
      }
    );
    
    Copy
  3. 自動分類を有効にする前に、 SYSTEM$CLASSIFY ストアドプロシージャを呼び出して、 table1 テーブルのタグマッピングをテストします。

    CALL SYSTEM$CLASSIFY(
     'db.sch.table1',
     'db.sch.my_classification_profile'
    );
    
    Copy

    出力の 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
        }
      }
    }
    
  4. 分類プロファイルに基づく自動分類が望ましい結果をもたらすことを確認したら、データベースに分類プロファイルインスタンスをセットします。

    ALTER DATABASE mydb
     SET CLASSIFICATION_PROFILE = 'mydb.sch.my_classification_profile';
    
    Copy