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>
여기서
nameSpecifies 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;
특정 인스턴스를 사용하도록 특정 역할(예: data_analyst)을 사용하도록 설정하려면 다음 다음을 수행합니다.
GRANT SNOWFLAKE.DATA_PRIVACY.CUSTOM_CLASSIFIER ROLE
mydb.sch.my_instance!PRIVACY_USER TO ROLE data_analyst;
예¶
사용자 지정 분류자를 사용하여 데이터를 분류하는 대략적인 접근 방식은 다음과 같습니다.
분류할 테이블을 식별합니다.
SQL을 사용하여 다음을 수행합니다.
Create a custom classifier instance.
Add the custom semantic category and regular expressions to the instance.
테이블을 분류합니다.
테이블을 분류하는 사용자 지정 분류자를 생성하려면 다음 단계를 완료하십시오.
열 중 하나에 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;
As the data owner, create a schema to store your custom classifier instances:
USE ROLE data_owner; CREATE SCHEMA data.classifiers;
Use the CREATE CUSTOM_CLASSIFIER command to create a custom classifier instance in the
data.classifiersschema: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( 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 );
반환 결과:
+---------------+ | ADD_REGEX | +---------------+ | ICD_10_CODES | +---------------+
팁
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}');
+-------------+ | 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 메서드를 호출하십시오.
SYSTEM$CLASSIFY_SCHEMA 저장 프로시저를 호출하여 테이블을 분류합니다.
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;
사용자 지정 분류기 감사하기¶
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%';
특정 인스턴스에 정규식 추가를 감사하려면 다음 쿼리를 사용하여
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;
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%';