SQL을 사용해 민감한 데이터 분류를 설정해요

SQL을 사용해 민감한 데이터 분류를 설정해요

Enterprise Edition Feature

민감 데이터 분류에는 Enterprise Edition 이상이 필요해요. 업그레이드에 대해 문의하려면 Snowflake Support에 연락해 주세요.

다음 섹션에서는 SQL을 사용하여 데이터베이스 내에서 민감 데이터의 자동 분류를 설정하는 방법을 설명해요. 웹 인터페이스를 사용하여 민감 데이터 분류를 설정하려면 Use the Trust Center to set up sensitive data classification를 참조하세요. 분류가 실행된 후에는 Trust Center를 사용하여 review classification results and view classification errors를 할 수 있어요.

SQL을 사용하여 민감 데이터를 분류하는 기본 워크플로는 다음 단계로 구성되어 있어요.

  1. 민감 데이터 분류 중에 수행할 작업을 제어하는 분류 프로필을 만들어요.

  2. 데이터베이스나 스키마에 분류 프로필을 설정하여 해당 엔티티의 테이블을 자동으로 분류해요.

이 워크플로의 전체 예시는 Examples를 참조하세요.

출처: 문서

본문


분류 프로필 정보

분류 프로필은 데이터베이스의 테이블을 자동으로 분류하는 데 사용되는 기준을 정의해요. 이러한 기준은 다음과 같아요:

  • 테이블이 자동으로 분류되기 전에 얼마나 오래 존재해야 하는지.

  • 이전에 분류된 테이블을 다시 분류하기 전에 얼마나 기다려야 하는지.

  • 분류 후 시스템 태그와 사용자 지정 태그를 열에 자동으로 설정할지 여부. Snowflake가 제안된 태그를 자동으로 적용하도록 할지, 아니면 제안된 태그 할당을 검토한 후 직접 적용할지 결정할 수 있어요.

  • 사용자 정의 태그가 자동으로 적용될 수 있도록 시스템 분류 태그와 사용자 정의 객체 태그 간의 매핑.

  • 사용자 지정 분류기를 사용하여 데이터를 분류할지 여부.

데이터 엔지니어가 분류 프로필을 데이터베이스에 할당하면 해당 데이터베이스에 속한 테이블의 민감한 데이터가 프로필에 정의된 일정에 따라 자동으로 분류돼요. 데이터 엔지니어는 동일한 분류 프로필을 여러 데이터베이스에 할당하거나, 여러 분류 프로필을 만들어 데이터베이스마다 다른 분류 기준을 설정할 수 있어요.

SQL을 사용하여 분류 프로필을 만들려면 CREATE CLASSIFICATION_PROFILE 명령을 실행하여 CLASSIFICATION_PROFILE 클래스의 인스턴스를 만들어요.

CREATE CLASSIFICATION_PROFILE 명령을 사용하여 분류 프로필을 만드는 예는 예제를 참조하세요.

분류 프로필에서 AI 모드 사용

미리 보기 기능 — 공개

Enterprise Edition 이상에서 사용할 수 있어요.

분류 프로필에서 AI 모드를 활성화하여 표준 분류에서 식별되는 범주 외에 추가 의미 범주를 식별하기 위해 LLM을 사용할 수 있어요. 프로필을 만들 때 프로필 구성에 'ai_mode': true를 설정하세요:

CREATE OR REPLACE SNOWFLAKE.DATA_PRIVACY.CLASSIFICATION_PROFILE
  my_ai_profile({
    'minimum_object_age_for_classification_days': 0,
    'auto_tag': true,
    'ai_mode': true
  });

참고

현재 AI 모드는 OpenAI GPT-5 Mini 모델만 지원해요.

기존 분류 프로필에서 AI 모드를 활성화하려면 SET_AI_MODE 메서드를 호출하세요:

CALL my_ai_profile!SET_AI_MODE(true);

기존 프로필에서 AI 모드를 비활성화하려면:

CALL my_ai_profile!SET_AI_MODE(false);

태그 매핑 정보

분류 프로필을 사용하여 SEMANTIC_CATEGORY 시스템 태그를 하나 이상의 객체 태그에 매핑할 수 있어요. 이 태그 매핑을 사용하면 민감한 데이터가 있는 열은 분류 결과에 따라 사용자 정의 태그가 자동으로 할당될 수 있어요. 태그 맵은 분류 프로필을 만들 때 추가하거나 나중에 <classification_profile_name>!SET_TAG_MAP 메서드를 호출하여 추가할 수 있어요.

분류 프로필을 만들 때 태그 맵을 정의하든 이후에 정의하든, 맵의 내용은 JSON 객체로 지정돼요. 이 JSON 객체에는 'column_tag_map' 키가 포함되어 있으며, 이 키는 사용자 정의 태그, 해당 태그의 문자열 값, 태그가 매핑되는 의미 범주를 지정하는 객체 배열이에요.

다음은 태그 맵의 예시예요:

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

이 매핑에 따라 이메일 주소 열이 있고 분류 프로세스에서 해당 열에 이메일 주소가 포함된 것으로 확인되면, 이메일 주소가 포함된 열에 tag_db.sch.pii = 'Confidential' 태그가 설정돼요.

태그 맵에 태그, 태그 값, 범주 값을 매핑하는 여러 JSON 객체가 포함된 경우, JSON 객체의 순서에 따라 충돌이 있을 때 열에 설정할 태그와 값이 결정돼요. JSON 객체를 왼쪽에서 오른쪽으로, 또는 JSON 형식인 경우 위에서 아래로 원하는 할당 순서로 지정하세요.

팁

column_tag_map 필드의 각 객체에는 필수 키가 하나만 있어요: tag_name. tag_value 및 semantic_categories 키를 생략하면 사용자 정의 태그가 SEMANTIC_CATEGORY 시스템 태그가 적용된 모든 열에 적용되며, 사용자 정의 태그의 값은 해당 열의 SEMANTIC_CATEGORY 태그 값과 일치해요.

수동으로 할당된 태그와 자동 분류로 적용된 태그 간에 충돌이 있으면 오류가 발생해요. 이러한 오류를 추적하는 방법에 대한 자세한 내용은 민감한 데이터 분류 문제 해결을 참조하세요.

기본 의미 범주의 하위 집합을 사용하여 데이터 분류

기본적으로 Snowflake는 민감한 데이터를 식별할 때마다 데이터를 기본 의미 범주로 분류해요. 의미 범주는 이메일 주소, 신용카드 번호, 주민등록번호와 같은 데이터 유형을 나타내요.

분류 프로필을 구성하여 민감한 데이터로 분류할 데이터 유형(의미 범주)을 제한할 수 있어요. Snowflake는 프로필에서 지정한 의미 범주의 하위 집합에 속하는 데이터만 분류해요.



분류 프로필의 구성 객체에 있는 snowflake_semantic_categories 키는 분류하려는 의미 범주 목록을 정의해요. 분류할 데이터를 두 가지 방법으로 지정할 수 있어요.

  • 의미 범주로 분류: NAME이나 EMAIL 같은 범주를 지정하면 위치에 관계없이 해당 유형의 모든 데이터를 분류해요.

  • 의미 범주와 국가로 분류: TAX_IDENTIFIER나 PASSPORT처럼 국가별 하위 범주가 있는 범주의 경우 country_codes 키를 사용하여 특정 국가의 데이터만 분류할 수 있어요. 두 글자 국가 코드와 지원되는 의미 하위 범주 목록은 Native semantic categories of sensitive data classification를 참조하세요.

같은 분류 프로필에서 두 가지 방식을 함께 사용할 수 있어요. 다음 예시는 각 변형을 보여줘요.

예 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'}
        ]
    });

예 2: 특정 국가 코드로 범주 분류

국가별 하위 범주가 있는 의미 범주의 경우 country_codes 키를 사용하여 분류를 특정 국가로 제한할 수 있어요. country_codes 값은 두 글자 국가 코드예요.

이 예시는 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']
          }
        ]
    });

예 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']
          }
        ]
    });

데이터베이스에 분류 프로필 설정

데이터베이스에 분류 프로필을 설정하여 민감 데이터 분류를 구현해요. 데이터베이스에 분류 프로필을 설정하면 해당 데이터베이스 내의 모든 테이블과 뷰가 민감 데이터 분류에 의해 자동으로 모니터링돼요.

스키마에도 분류를 설정할 수 있어요. 분류 프로필과 연결된 데이터베이스 내에 있는 스키마에 분류 프로필을 설정하면, 스키마에 설정된 프로필이 데이터베이스에 설정된 프로필을 재정의해요.

분류 프로필을 설정하려면 ALTER DATABASE 또는 ALTER SCHEMA 명령을 사용하여 CLASSIFICATION_PROFILE 매개 변수를 설정해요. 예를 들어 my_db 데이터베이스의 모든 테이블과 뷰가 민감 데이터 분류에 의해 모니터링되도록 my_profile 분류 프로필을 설정하려면 다음 명령을 실행해요:

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

데이터베이스에서 분류 프로필 설정 해제

데이터베이스에서 분류 프로필을 제거하여 데이터베이스의 테이블과 뷰가 더 이상 해당 프로필과 연결되지 않도록 하려면 ALTER DATABASE를 UNSET CLASSIFICATION_PROFILE과 함께 사용해요. 프로필을 설정할 때와 동일한 권한이 필요해요(예: 데이터베이스에 대한 EXECUTE AUTO CLASSIFICATION).

예를 들어 my_db 데이터베이스에서 분류 프로필 설정을 해제하려면 다음 명령을 실행해요:

ALTER DATABASE my_db UNSET CLASSIFICATION_PROFILE;

전체 ALTER DATABASE 구문과 해제 옵션은 ALTER DATABASE를 참조하세요.

액세스 제어

분류 프로필을 사용하고 민감 데이터 분류를 활성화할 수 있는 권한과 역할은 다음과 같아요. Using SNOWFLAKE database roles


작업 필요한 권한/역할 참고
분류 프로필 생성 SNOWFLAKE.CLASSIFICATION_ADMIN 데이터베이스 역할 이 데이터베이스 역할을 다른 역할에 부여하는 방법에 대한 자세한 내용은 참조하세요.
스키마에 대한 CREATE SNOWFLAKE.DATA_PRIVACY.CLASSIFICATION_PROFILE 분류 프로필 인스턴스를 생성하려는 스키마에 이 권한이 필요해요.
데이터베이스와 스키마에 대한 USAGE 분류 프로필 인스턴스를 생성하려는 스키마에 대한 권한이 필요해요.
데이터베이스/스키마에 분류 프로필 설정 다음 중 하나: 계정에 대한 EXECUTE AUTO CLASSIFICATION, 데이터베이스/스키마에 대한 EXECUTE AUTO CLASSIFICATION 기본적으로 데이터베이스/스키마의 소유자는 해당 리소스에 대한 EXECUTE AUTO CLASSIFICATION 권한을 가지고 있어요.
스키마의 데이터베이스에 대한 권한 스키마에 분류 프로필을 설정하는 경우 해당 스키마를 포함하는 데이터베이스에 대한 권한이 하나 이상 필요해요.
데이터베이스/스키마에 대한 권한 자동 분류하려는 테이블이 포함된 데이터베이스/스키마에 대한 권한이 하나 이상 필요해요. EXECUTE AUTO CLASSIFICATION 권한이 이 요구 사항을 충족해요.
다음 중 하나: 분류 프로필 인스턴스에 대한 OWNERSHIP, 분류 프로필에 대한 <classification_profile>!PRIVACY_USER 인스턴스 역할 PRIVACY_USER 인스턴스 역할을 다른 역할에 부여하는 방법에 대한 자세한 내용은 참조하세요.
계정에 대한 APPLY TAG
분류 프로필 인스턴스에서 호출 <classification_profile>!PRIVACY_USER 인스턴스 역할 이 인스턴스 역할을 다른 역할에 부여하는 방법에 대한 자세한 내용은 참조하세요.
분류 프로필 나열 <classification_profile>!PRIVACY_USER 인스턴스 역할
분류 프로필 삭제 분류 프로필 인스턴스에 대한 OWNERSHIP

데이터 엔지니어 역할에 이러한 권한과 데이터베이스 역할을 부여하는 예는 기본 예: 데이터베이스에서 테이블 자동 분류를 참조하세요.

예제

기본 예: 데이터베이스에서 테이블 자동 분류

데이터베이스에서 테이블을 자동으로 분류하려면 다음 단계를 완료하세요.

관리자로서 데이터 엔지니어에게 데이터베이스에서 테이블을 자동으로 분류하는 데 필요한 역할과 권한을 부여하세요.

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;

데이터 엔지니어 역할로 전환하세요:

USE ROLE data_engineer;

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': false
    });

인스턴스에서 DESCRIBE 메서드를 호출하여 속성을 확인하세요:

SELECT my_classification_profile!DESCRIBE();

스키마에 분류 프로필 인스턴스를 설정하세요. 이렇게 하면 스키마의 테이블을 모니터링하고 민감한 데이터를 자동으로 분류하는 백그라운드 프로세스가 시작돼요.

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

참고

스키마에 분류 프로필을 설정한 후 Snowflake가 스키마 분류를 시작하기까지 1시간의 지연이 있어요.

1시간을 기다린 후 SYSTEM$GET_CLASSIFICATION_RESULT 저장 프로시저를 호출하여 자동 분류 결과를 얻으세요.

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

예: 태그 맵과 사용자 지정 분류기 사용

관리자로서 데이터 엔지니어에게 데이터베이스에서 테이블을 자동으로 분류하고 열에 태그를 설정하는 데 필요한 역할과 권한을 부여하세요.

분류 프로필을 생성하세요.

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': false
    });

인스턴스에서 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']
 }]});

또는 분류 프로필을 생성할 때 이 태그 맵을 추가할 수도 있었어요.

SET_CUSTOM_CLASSIFIERS 메서드를 호출하여 분류 프로필에 사용자 지정 분류기를 추가하세요. 이렇게 하면 사용자 정의 의미론적 범주와 개인정보 보호 범주로 민감한 데이터를 자동으로 분류할 수 있어요.

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

또는 분류 프로필을 생성할 때 사용자 지정 분류기를 추가할 수도 있었어요.

인스턴스에서 DESCRIBE 메서드를 호출하여 태그 맵과 사용자 지정 분류기가 분류 프로필에 추가되었는지 확인하세요.

SELECT my_classification_profile!DESCRIBE();

데이터베이스에 분류 프로필 인스턴스를 설정하세요.

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

태그 기반 마스킹을 활성화하려면 tag_db.sch.pii 태그에 마스킹 정책을 연결하세요.

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

예: 자동 분류를 활성화하기 전에 분류 프로필 테스트



관리자로서 데이터 엔지니어에게 스키마의 테이블을 자동으로 분류하고 열에 태그를 설정하는 데 필요한 roles and privileges를 부여해 주세요.

태그 맵과 사용자 지정 분류기가 포함된 분류 프로필을 생성하세요.

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': false,
 'custom_classifiers': {
   'medical_codes': medical_codes!list(),
   'finance_codes': finance_codes!list()
 }
  }
);

자동 분류를 활성화하기 전에 table1 테이블에서 태그 매핑을 테스트하려면 SYSTEM$CLASSIFY 저장 프로시저를 호출하세요.

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

출력의 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
 }
  }
}

분류 프로필에 기반한 자동 분류가 원하는 결과를 낼 것임을 확인했다면, 데이터베이스에 분류 프로필 인스턴스를 설정하세요.

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

더 이상 데이터베이스에서 자동 민감 데이터 분류를 원하지 않으면, 데이터베이스에서 분류 프로필을 해제하세요. 해제하면 데이터베이스와 프로필 간의 연결이 제거되어 자동 분류를 위해 테이블과 뷰를 모니터링하는 백그라운드 프로세스가 중지돼요. 자세한 내용은 Unset a classification profile on a database를 참조하세요.

ALTER DATABASE mydb UNSET CLASSIFICATION_PROFILE;

더 알아보기 (Learn more)