사용자 지정 분류기 사용하기

사용자 지정 분류는 CUSTOM_CLASSIFIER 클래스를 사용하여 데이터 엔지니어가 데이터에 대한 자체 지식을 기반으로 데이터 분류 기능을 확장할 수 있도록 지원합니다. 원하는 데이터베이스와 스키마에 CUSTOM_CLASSIFIER 클래스의 인스턴스를 생성하고 인스턴스 메서드를 호출하여 인스턴스와 관련된 정규식을 관리할 수 있습니다.

명령 및 메서드

다음 메서드와 SQL 명령이 지원됩니다.

액세스 제어

이 섹션에서는 인스턴스를 사용하는 데 필요한 다양한 오브젝트의 역할과 권한을 요약합니다.

역할

사용자 지정 분류와 함께 다음 역할을 사용할 수 있습니다.

  • SNOWFLAKE.CLASSIFICATION_ADMIN: 사용자 지정 분류 인스턴스를 생성할 수 있는 데이터베이스 역할입니다.

  • custom_classifier !PRIVACY_USER: 인스턴스에서 다음 메서드를 호출할 수 있는 인스턴스 역할:

    • ADD_REGEX

    • LIST

    • DELETE_CATEGORY

  • 인스턴스에 대한 OWNERSHIP 권한이 있는 계정 역할은 다음 명령을 실행할 수 있습니다.

    • DROP CUSTOM_CLASSIFIER

    • SHOW CUSTOM_CLASSIFIER

권한

인스턴스를 생성하고 관리하려면 역할에 CREATE SNOWFLAKE.DATA_PRIVACY.CUSTOM_CLASSIFIER 권한 권한을 부여하거나 역할에 PRIVACY_USER 인스턴스 역할을 부여하도록 선택할 수 있습니다.

다른 사용자가 사용자 지정 분류 인스턴스로 작업할 수 있도록 계정 역할 및 데이터베이스 역할에 인스턴스 역할을 부여할 수 있습니다.

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

사용자 지정 분류 인스턴스의 이름을 지정합니다.

role_name

계정 역할의 이름을 지정합니다.

database_role_name

데이터베이스 역할의 이름을 지정합니다.

인스턴스에서 메서드를 호출하려면 웨어하우스를 사용해야 합니다. 그러나 GRANT OWNERSHIP 명령을 사용하여 인스턴스의 소유권을 다른 역할이나 데이터베이스 역할로 이전할 수는 없습니다.

사용자 지정 역할 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. 사용자 지정 분류 인스턴스를 만듭니다.

    2. 인스턴스에 시스템 태그 카테고리와 정규식을 추가합니다.

    3. 테이블을 분류합니다.

테이블을 분류하는 사용자 지정 분류자를 생성하려면 다음 단계를 완료하십시오.

  1. 열 중 하나에 ICD-10코드 등의 진단 코드가 포함된 테이블 data.tables.patient_diagnosis 를 생각해 보십시오.

    +-------------+----------------------------------------------------------+
    | 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. 데이터 소유자로서 사용자 지정 분류 인스턴스를 저장할 스키마를 생성합니다.

    USE ROLE data_owner;
    CREATE SCHEMA data.classifiers;
    
    Copy
  4. CREATE CUSTOM_CLASSIFIER 명령을 사용하여 data.classifiers 스키마에 사용자 지정 분류 인스턴스를 생성합니다.

    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(
      'ICD_10_CODES',
      'IDENTIFIER',
      '[A-TV-Z][0-9][0-9AB]\.?[0-9A-TV-Z]{0,4}',
      'ICD.*',
      'Add a regex to identify ICD-10 medical codes in a column',
      0.8,
    );
    
    Copy

    반환 결과:

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

    사용자 지정 분류 인스턴스에 정규식을 추가하기 전에 정규식을 테스트하십시오. 예:

    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. SQL을 사용하여 테이블을 분류합니다. 자세한 내용은 SQL을 사용하여 비동기 방식으로 스키마의 테이블 분류하기 섹션을 참조하십시오.

  9. 인스턴스가 더 이상 필요하지 않으면 DROP CUSTOM_CLASSIFIER 명령을 사용하여 시스템에서 사용자 지정 분류 인스턴스를 제거합니다.

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

사용자 지정 분류기 감사하기

다음 쿼리를 사용하여 사용자 지정 분류 인스턴스 만들기, 인스턴스에 정규식 추가, 인스턴스 삭제 등을 감사할 수 있습니다.

  • 사용자 지정 분류 인스턴스 생성을 감사하려면 다음 쿼리를 사용합니다.

    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
  • 사용자 지정 분류 인스턴스 삭제를 감사하려면 다음 쿼리를 사용합니다.

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