민감한 데이터 분류를 위한 사용자 지정 분류기 사용¶
사용자 지정 분류는 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>
여기서
- name
- 사용자 지정 분류 인스턴스의 이름을 지정합니다. 
- 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;
특정 인스턴스를 사용하도록 특정 역할(예: data_analyst)을 사용하도록 설정하려면 다음 다음을 수행합니다.
GRANT SNOWFLAKE.DATA_PRIVACY.CUSTOM_CLASSIFIER ROLE
  mydb.sch.my_instance!PRIVACY_USER TO ROLE data_analyst;
예¶
사용자 지정 분류자를 사용하여 데이터를 분류하는 대략적인 접근 방식은 다음과 같습니다.
- 분류할 테이블을 식별합니다. 
- SQL을 사용하여 다음을 수행합니다. - 사용자 지정 분류 인스턴스를 만듭니다. 
- 인스턴스에 시스템 태그 카테고리와 정규식을 추가합니다. 
- 테이블을 분류합니다. 
 
테이블을 분류하는 사용자 지정 분류자를 생성하려면 다음 단계를 완료하십시오.
- 열 중 하나에 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 | +-------------+----------------------------------------------------------+ - 이 테이블에는 이름과 성, 고유한 건강 보험 식별자, 생년월일 등 의료 시설에서 치료를 받은 환자를 식별하는 열이 포함될 수도 있습니다. 데이터 소유자는 테이블을 모니터링할 수 있도록 열에 태그가 올바르게 지정되도록 보장하기 위해 테이블을 분류할 수 있습니다. - 이 예에서 데이터 소유자는 이미 자신의 역할에 다음과 같은 권한을 부여했습니다. - 분류할 테이블에 대한 OWNERSHIP. 
- 테이블이 포함된 스키마에 대한 OWNERSHIP. 
- 스키마와 테이블이 포함된 데이터베이스에 대한 USAGE. 
 
- 데이터 소유자 역할에 SNOWFLAKE.CLASSIFICATION_ADMIN 데이터베이스 역할을 부여하여 데이터 소유자가 테이블을 분류할 수 있도록 합니다. - USE ROLE ACCOUNTADMIN; GRANT DATABASE ROLE SNOWFLAKE.CLASSIFICATION_ADMIN TO ROLE data_owner; 
- 데이터 소유자로서 사용자 지정 분류 인스턴스를 저장할 스키마를 생성합니다. - USE ROLE data_owner; CREATE SCHEMA data.classifiers; 
- CREATE CUSTOM_CLASSIFIER 명령을 사용하여 - data.classifiers스키마에 사용자 지정 분류 인스턴스를 생성합니다.- CREATE OR REPLACE SNOWFLAKE.DATA_PRIVACY.CUSTOM_CLASSIFIER medical_codes(); - 선택적으로 검색 경로 를 다음과 같이 업데이트할 수 있습니다. - 클래스의 새 인스턴스를 생성할 때 클래스의 정규화된 이름을 지정할 필요가 없도록 - SNOWFLAKE.DATA_PRIVACY를 추가합니다.
- 인스턴스에서 메서드를 호출하거나 인스턴스와 함께 명령을 사용할 때 인스턴스의 정규화된 이름을 지정할 필요가 없도록 - DATA.CLASSIFIERS를 추가합니다.
 
- SHOW CUSTOM_CLASSIFIER 명령을 사용하여 생성하는 각 인스턴스를 나열합니다. 예: - SHOW SNOWFLAKE.DATA_PRIVACY.CUSTOM_CLASSIFIER; - 반환 결과: - +----------------------------------+---------------+---------------+-------------+-----------------+---------+-------------+ | 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 | +----------------------------------+---------------+---------------+-------------+-----------------+---------+-------------+ 
- 인스턴스에서 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 ); - 반환 결과: - +---------------+ | 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}'); - +-------------+ | ICD-10-CODE | +-------------+ | G30.9 | | G80.8 | | S13.4XXA | +-------------+ - 이 쿼리에서는 정규식과 일치하는 유효한 값만 반환됩니다. 쿼리는 - xyz등의 유효하지 않은 값을 반환하지 않습니다.- 자세한 내용은 문자열 함수(정규식) 섹션을 참조하십시오. 
- 인스턴스에서 custom_classifier !LIST 메서드를 호출하여 인스턴스에 추가한 정규식을 확인합니다. - SELECT medical_codes!LIST(); - 반환 결과: - +--------------------------------------------------------------------------------+ | 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 메서드를 호출하십시오. 
- SQL을 사용하여 테이블을 분류합니다. 자세한 내용은 SQL을 사용하여 비동기 방식으로 스키마의 테이블 분류하기 섹션을 참조하십시오. 
- 인스턴스가 더 이상 필요하지 않으면 DROP CUSTOM_CLASSIFIER 명령을 사용하여 시스템에서 사용자 지정 분류 인스턴스를 제거합니다. - DROP SNOWFLAKE.DATA_PRIVACY.CUSTOM_CLASSIFIER data.classifiers.medical_codes; 
사용자 지정 분류기 감사하기¶
다음 쿼리를 사용하여 사용자 지정 분류 인스턴스 만들기, 인스턴스에 정규식 추가, 인스턴스 삭제 등을 감사할 수 있습니다.
- 사용자 지정 분류 인스턴스 생성을 감사하려면 다음 쿼리를 사용합니다. - SELECT * FROM SNOWFLAKE.ACCOUNT_USAGE.QUERY_HISTORY WHERE query_text ILIKE 'create % snowflake.data_privacy.custom_classifier%'; 
- 특정 인스턴스에 정규식 추가를 감사하려면 다음 쿼리를 사용하여 - 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; 
- 사용자 지정 분류 인스턴스 삭제를 감사하려면 다음 쿼리를 사용합니다. - SELECT * FROM SNOWFLAKE.ACCOUNT_USAGE.QUERY_HISTORY WHERE query_text ILIKE 'drop % snowflake.data_privacy.custom_classifier%';