Using custom classifiers to implement custom semantic categories

The CUSTOM_CLASSIFIER class allows data engineers to extend their sensitive data classification capabilities based on their own knowledge of their data. To classify sensitive data into custom semantic categories, create an instance of the CUSTOM_CLASSIFIER class in a schema and call instance methods to add regular expressions associated with the instance.

CUSTOM_CLASSIFIER インスタンスを使用してカスタムセマンティックカテゴリを作成するエンドツーエンドの例については、 をご参照ください。

コマンドとメソッド

以下のメソッドと SQL コマンドがサポートされています。

アクセス制御

これらのセクションでは、インスタンスを使用するために必要なさまざまなオブジェクトのロールと付与をまとめています。

ロール

カスタム分類で以下のロールを使用できます。

  • SNOWFLAKE.CLASSIFICATION_ADMIN: database role that enables you to create a custom classifier instance.

  • custom_classifier !PRIVACY_USER: インスタンス上で以下のメソッドを呼び出すことができる インスタンスロール:

    • ADD_REGEX

    • LIST

    • DELETE_CATEGORY

  • インスタンでOWNERSHIP権限を持つアカウントロールは、これらのコマンドを実行できます。

    • DROP CUSTOM_CLASSIFIER

    • SHOW CUSTOM_CLASSIFIER

付与

インスタンスを作成して管理するには、 CREATE SNOWFLAKE 、 DATA_PRIVACY 、 CUSTOM_CLASSIFIER 権限 をロールに付与するか、 PRIVACY_USER インスタンスロールをロールに付与するかを選択します。

You can grant the instance roles to account roles and database roles to enable other users to work with custom classifier instances:

GRANT SNOWFLAKE.DATA_PRIVACY.CUSTOM_CLASSIFIER ROLE <name>!PRIVACY_USER
  TO ROLE <role_name>

REVOKE SNOWFLAKE.DATA_PRIVACY.CUSTOM_CLASSIFIER ROLE <name>!PRIVACY_USER
  FROM ROLE <role_name>

GRANT SNOWFLAKE.DATA_PRIVACY.CUSTOM_CLASSIFIER ROLE <name>!PRIVACY_USER
  TO DATABASE ROLE <database_role_name>

REVOKE SNOWFLAKE.DATA_PRIVACY.CUSTOM_CLASSIFIER ROLE <name>!PRIVACY_USER
  FROM DATABASE ROLE <database_role_name>
Copy

条件:

name

Specifies the name of the custom classifier instance.

role_name

アカウントロールの名前を指定します。

database_role_name

データベースロールの名前を指定します。

インスタンスのメソッドを呼び出すには、ウェアハウスを使わなければなりません。

カスタムロール my_classification_role に、必要なインスタンスロールと、 CUSTOM_CLASSIFIER クラスのインスタンスを作成して使用する権限を付与するには、以下のステートメントを実行します:

USE ROLE ACCOUNTADMIN;
GRANT DATABASE ROLE SNOWFLAKE.CLASSIFICATION_ADMIN
  TO ROLE my_classification_role;
GRANT USAGE ON DATABASE mydb TO ROLE my_classification_role;
GRANT USAGE ON SCHEMA mydb.instances TO ROLE my_classification_role;
GRANT USAGE ON WAREHOUSE wh_classification TO ROLE my_classification_role;
Copy

特定のインスタンスを使用できるようにする data_analyst など、特定のロールを有効にしたい場合は、次のようにします:

GRANT SNOWFLAKE.DATA_PRIVACY.CUSTOM_CLASSIFIER ROLE
  mydb.sch.my_instance!PRIVACY_USER TO ROLE data_analyst;
Copy

カスタム分類子を使用してデータを分類するための、高レベルのアプローチは次のとおりです。

  1. 分類するテーブルを特定します。

  2. SQL を使用して次を実行します。

    1. Create a custom classifier instance.

    2. Add the custom semantic category and regular expressions to the instance.

    3. テーブルを分類します。

テーブルを分類するカスタム分類子を作成するには、次の手順を実行します。

  1. テーブル data.tables.patient_diagnosis の列の1つに、 ICD-10コード のような診断コードが含まれているとします。

    +-------------+----------------------------------------------------------+
    | ICD_10_CODE | DESCRIPTION                                              |
    +-------------+----------------------------------------------------------+
    | G30.9       | Alzheimer's disease, unspecified                         |
    | G80.8       | Other cerebral palsy                                     |
    | S13.4XXA    | Sprain of ligaments of cervical spine, initial encounter |
    +-------------+----------------------------------------------------------+
    
    Copy

    このテーブルには、医療施設で治療を受けた患者の氏名、固有の健康保険識別子、生年月日など、患者を識別するための列も含まれる場合があります。データ所有者はテーブルを分類して列が正しくタグ付けされていることを確認することで、テーブルをモニターできます。

    この例では、データ所有者のロールにはすでに次の権限が付与されています。

    • 分類するテーブルに対する OWNERSHIP。

    • テーブルを含むスキーマに対する OWNERSHIP。

    • スキーマとテーブルを含むデータベースに対する USAGE。

  2. データ所有者ロールに SNOWFLAKE.CLASSIFICATION_ADMIN データベースロールを付与することで、データ所有者がテーブルを分類できるようにします。

    USE ROLE ACCOUNTADMIN;
    GRANT DATABASE ROLE SNOWFLAKE.CLASSIFICATION_ADMIN
      TO ROLE data_owner;
    
    Copy
  3. As the data owner, create a schema to store your custom classifier instances:

    USE ROLE data_owner;
    CREATE SCHEMA data.classifiers;
    
    Copy
  4. Use the CREATE CUSTOM_CLASSIFIER command to create a custom classifier instance in the data.classifiers schema:

    CREATE OR REPLACE SNOWFLAKE.DATA_PRIVACY.CUSTOM_CLASSIFIER medical_codes();
    
    Copy

    オプションで、 検索パス を以下のように更新することができます:

    • クラスの新しいインスタンスを作成するときに、クラスの完全修飾名を指定する必要がないように、 SNOWFLAKE.DATA_PRIVACY を追加します。

    • インスタンス上でメソッドを呼び出すときや、インスタンスでコマンドを使用するときに、インスタンスの完全修飾名を指定する必要がないように、 DATA.CLASSIFIERS を追加します。

  5. SHOW CUSTOM_CLASSIFIER コマンドを使用して、作成した各インスタンスを一覧表示します。例:

    SHOW SNOWFLAKE.DATA_PRIVACY.CUSTOM_CLASSIFIER;
    
    Copy

    戻り値:

    +----------------------------------+---------------+---------------+-------------+-----------------+---------+-------------+
    | created_on                       | name          | database_name | schema_name | current_version | comment | owner       |
    +----------------------------------+---------------+---------------+-------------+-----------------+---------+-------------+
    | 2023-09-08 07:00:00.123000+00:00 | MEDICAL_CODES | DATA          | CLASSIFIERS | 1.0             | None    | DATA_OWNER  |
    +----------------------------------+---------------+---------------+-------------+-----------------+---------+-------------+
    
  6. インスタンスの custom_classifier !ADD_REGEX メソッドを呼び出して、列の ICD-10コードを識別するためのシステムタグと正規表現を指定します。この例の正規表現は、すべての可能な ICD-10コードに一致します。列名に一致する正規表現、 ICD.*、コメントはオプションです。

    CALL medical_codes!ADD_REGEX(
      SEMANTIC_CATEGORY => 'ICD_10_CODES',
      PRIVACY_CATEGORY => 'IDENTIFIER',
      VALUE_REGEX => '[A-TV-Z][0-9][0-9AB]\.?[0-9A-TV-Z]{0,4}',
      COL_NAME_REGEX => 'ICD.*',
      DESCRIPTION => 'Add a regex to identify ICD-10 medical codes in a column',
      THRESHOLD => 0.8
    );
    
    Copy

    戻り値:

    +---------------+
    |   ADD_REGEX   |
    +---------------+
    | ICD_10_CODES  |
    +---------------+
    

    Tip

    Test the regular expression before adding a regular expression to the custom classifier instance. For example:

    SELECT icd_10_code
    FROM medical_codes
    WHERE icd_10_code REGEXP('[A-TV-Z][0-9][0-9AB]\.?[0-9A-TV-Z]{0,4}');
    
    Copy
    +-------------+
    | ICD-10-CODE |
    +-------------+
    | G30.9       |
    | G80.8       |
    | S13.4XXA    |
    +-------------+
    

    このクエリでは、正規表現に一致する有効な値のみが返されます。クエリは xyz などの無効な値を返しません。

    詳細については、 文字列関数(正規表現) をご参照ください。

  7. インスタンスの custom_classifier !LIST メソッドを呼び出して、インスタンスに追加した正規表現を検証します。

    SELECT medical_codes!LIST();
    
    Copy

    戻り値:

    +--------------------------------------------------------------------------------+
    | MEDICAL_CODES!LIST()                                                           |
    +--------------------------------------------------------------------------------+
    | {                                                                              |
    |   "ICD-10-CODES": {                                                            |
    |     "col_name_regex": "ICD.*",                                                 |
    |     "description": "Add a regex to identify ICD-10 medical codes in a column", |
    |     "privacy_category": "IDENTIFIER",                                          |
    |     "threshold": 0.8,                                                          |
    |     "value_regex": "[A-TV-Z][0-9][0-9AB]\.?[0-9A-TV-Z]{0,4}"                   |
    |   }                                                                            |
    | }                                                                              |
    +--------------------------------------------------------------------------------+
    

    カテゴリを削除するには、インスタンスの custom_classifier !DELETE_CATEGORY メソッドを呼び出します。

  8. テーブルを分類するために SYSTEM$CLASSIFY_SCHEMA ストアドプロシージャを呼び出します。

  9. If the instance is no longer needed, use the DROP CUSTOM_CLASSIFIER command to remove a custom classifier instance from the system:

    DROP SNOWFLAKE.DATA_PRIVACY.CUSTOM_CLASSIFIER data.classifiers.medical_codes;
    
    Copy

カスタム分類子の監査

You can use the following queries to audit the creation of custom classifier instances, adding regular expressions to instances, and dropping the instance.

  • To audit the creation of custom classifier instances, use the following query:

    SELECT * FROM SNOWFLAKE.ACCOUNT_USAGE.QUERY_HISTORY
    WHERE query_text ILIKE 'create % snowflake.data_privacy.custom_classifier%';
    
    Copy
  • 特定のインスタンスへの正規表現の追加を監査するには、次のクエリを使用し、 DB.SCH.MY_INSTANCE を監査したいインスタンス名に置き換えます:

    SELECT
        QUERY_HISTORY.user_name,
        QUERY_HISTORY.role_name,
        QUERY_HISTORY.query_text,
        QUERY_HISTORY.query_id
      FROM
        SNOWFLAKE.ACCOUNT_USAGE.QUERY_HISTORY query_history,
        SNOWFLAKE.ACCOUNT_USAGE.ACCESS_HISTORY access_history,
          TABLE(FLATTEN(input => access_history.direct_objects_accessed)) flattened_value
    WHERE flattened_value.value:"objectName" = 'DB.SCH.MY_INSTANCE!ADD_REGEX'
    AND QUERY_HISTORY.query_id = ACCESS_HISTORY.query_id;
    
    Copy
  • To audit dropping a custom classifier instance, use the following query:

    SELECT * FROM SNOWFLAKE.ACCOUNT_USAGE.QUERY_HISTORY
    WHERE query_text ILIKE 'drop % snowflake.data_privacy.custom_classifier%';
    
    Copy