민감한 데이터 분류 결과 확인 및 추적

이 항목에서는 민감한 데이터 분류 결과를 확인하고 추적하는 방법 및 분류 태그를 추적하여 민감한 데이터를 모니터링하는 방법에 대해 설명합니다.

Trust Center를 사용하여 분류 결과 확인

Trust Center에서 민감한 데이터 분류 결과를 보려면 다음 단계를 완료합니다.

  1. |sf-web-interface-link|요구 사항 권한이 있는 사용자로 :ref:` 에 로그인 <label-classify_trust_center_access_control>` 합니다.

  2. 탐색 메뉴에서 Governance & security » Trust Center 를 선택합니다.

  3. Data Security 탭을 선택합니다.

  4. 다음 중 하나를 수행하십시오.

    • 민감한 데이터의 보안에 대한 높은 수준의 인사이트를 확보하려면 Dashboard 탭을 선택합니다. 자세한 내용은 대시보드 페이지 검토 섹션을 참조하십시오.

    • 민감한 데이터가 포함된 것으로 분류된 모든 테이블과 뷰를 나열하려면 Sensitive objects 탭을 선택합니다.

      페이지가 열리면 테이블을 선택하여 민감한 데이터가 있는 열, 해당 열의 의미 체계 카테고리 및 태그가 열에 적용되었는지 여부를 확인합니다.

대시보드 페이지 검토

Dashboard 페이지에서는 분류된 데이터베이스 및 테이블 수와 같은 민감한 데이터의 보안에 대한 높은 수준의 인사이트를 제공합니다. 이 페이지에는 다음 타일이 포함됩니다.

타일

설명

Objects by compliance category

오브젝트의 정보 유형을 기준으로 규정 또는 기타 규정 준수 표준의 적용을 받을 수 있는 데이터가 포함된 오브젝트의 수를 식별합니다.

참고

규정 준수 카테고리와 의미 체계 카테고리 간의 매핑은 완전하지 않습니다. Snowflake에서 지원하는 네이티브 의미 체계 카테고리만 규정 준수 카테고리에 매핑됩니다. 전체 매핑은 규정 준수 카테고리 및 해당 의미 체계 카테고리 섹션을 참조하세요.

데이터에 적용되는 규정 또는 법률을 결정하고 해당 규정 또는 법률을 준수하는지 확인할 책임은 전적으로 사용자에게 있습니다.

Objects by semantic category

가장 일반적인 의미 체계 카테고리와 해당 카테고리에 속하는 데이터를 포함하는 오브젝트의 수를 식별합니다.

Databases monitored by auto-classification

민감한 데이터 분류를 통해 현재 모니터링 중인 데이터베이스를 식별합니다. 누군가 SQL을 사용하여 데이터베이스 수준에서 프로필을 설정하는 대신 데이터베이스의 스키마에 직접 분류 프로필을 설정한 경우 데이터베이스가 부분적으로 모니터링됩니다.

Classification status

현재 민감한 데이터에 대해 모니터링 중인 모든 데이터베이스가 분류되었는지 여부를 식별합니다.

Sensitive data masking status

민감한 데이터가 :doc:`마스킹 정책</user-guide/security-column-ddm-intro>`으로 보호되는지 여부를 식별합니다. 마스킹 정책은 태그 기반 정책이거나 열에 수동으로 적용된 정책일 수 있습니다.

민감한 데이터가 포함된 모든 열에 연결된 마스킹 정책이 있는 경우 테이블은 완전히 마스킹됩니다. 민감한 데이터가 포함된 일부 열만 마스킹 정책과 연결된 경우 테이블은 부분적으로 마스킹됩니다.

규정 준수 카테고리 및 해당 의미 체계 카테고리

참고

데이터에 적용되는 규정 또는 법률을 결정하고 해당 규정 또는 법률을 준수하는지 확인할 책임은 전적으로 사용자에게 있습니다. 민감한 데이터 분류 내의 규정 준수 카테고리는 작업을 지원하기 위해 즉시 사용 가능한 툴킷을 제공하도록 설계되었지만, 모든 카테고리를 포괄하는 것은 아닙니다. Snowflake에서 지원하는 :doc:`네이티브 의미 체계 카테고리</user-guide/classify-native>`만 규정 준수 카테고리에 매핑됩니다.

경고

HIPAA 데이터 요구 사항은 해당 엔터티 및 비즈니스 제휴사가 엄격한 관리적, 물리적, 기술적 보호 수단을 통해 보호 대상 건강 정보(PHI)의 기밀성, 무결성, 가용성을 보호하도록 규정합니다. HIPAA를 준수하지 않는 경우 상당한 패널티가 부과될 수 있습니다. PHI와 관련된 의미 체계 카테고리는 :ref:`label-classify_sensitive_information`에 포함됩니다.

다음 테이블을 참고하면 대시보드 페이지<label-classify_trust_center_review_dashboard>`의 :ui:`Objects by compliance category 타일을 이해할 수 있습니다.

규정 준수 카테고리

네이티브 의미 체계 카테고리

로캘

디지털 개인정보 보호법(DPDPA)

DATE_OF_BIRTH

해당 없음

DRIVERS_LICENSE

인도(IN)

EMAIL

해당 없음

NAME

해당 없음

NATIONAL_IDENTIFIER

인도(IN)

PHONE_NUMBER

해당 없음

STREET_ADDRESS

해당 없음

TAX_IDENTIFIER

인도(IN)

일반 데이터 보호 규정(GDPR)

AGE

해당 없음

DRIVERS_LICENSE

오스트리아(AT), 벨기에(BE), 불가리아(BG), 크로아티아(HR), 키프로스(CY), 체코 공화국(CZ), 덴마크(DK), 에스토니아(EE), 핀란드(FI), 프랑스(FR), 독일(DE), 그리스(GR), 헝가리(HU), 아일랜드(IE), 이탈리아(IT), 라트비아(LV), 리투아니아(LT), 룩셈부르크(LU), 몰타(MT), 네덜란드(NL), 폴란드(PL), 포르투갈(PT), 루마니아(RO), 슬로바키아(SK), 슬로베니아(SI), 스페인(ES), 스웨덴(SE)

EMAIL

해당 없음

ETHNICITY

해당 없음

GENDER

해당 없음

IBAN

해당 없음

IMEI

해당 없음

IP_ADDRESS

해당 없음

NAME

해당 없음

NATIONAL_IDENTIFIER

오스트리아(AT), 벨기에(BE), 불가리아(BG), 크로아티아(HR), 키프로스(CY), 체코 공화국(CZ), 덴마크(DK), 에스토니아(EE), 핀란드(FI), 프랑스(FR), 독일(DE), 그리스(GR), 헝가리(HU), 아일랜드(IE), 라트비아(LV), 리투아니아(LT), 룩셈부르크(LU), 몰타(MT), 네덜란드(NL), 폴란드(PL), 포르투갈(PT), 루마니아(RO), 슬로바키아(SK), 슬로베니아(SI), 스페인(ES), 스웨덴(SE), 영국(UK)

PASSPORT

오스트리아(AT), 벨기에(BE), 불가리아(BG), 크로아티아(HR), 키프로스(CY), 체코 공화국(CZ), 덴마크(DK), 에스토니아(EE), 핀란드(FI), 프랑스(FR), 독일(DE), 그리스(GR), 헝가리(HU), 아일랜드(IE), 이탈리아(IT), 라트비아(LV), 리투아니아(LT), 룩셈부르크(LU), 몰타(MT), 네덜란드(NL), 폴란드(PL), 포르투갈(PT), 루마니아(RO), 슬로바키아(SK), 슬로베니아(SI), 스페인(ES), 스웨덴(SE)

PAYMENT_CARD

해당 없음

PHONE_NUMBER

해당 없음

SALARY

해당 없음

TAX_IDENTIFIER

오스트리아(AT), 키프로스(CY), 프랑스(FR), 독일(DE), 그리스(GR), 헝가리(HU), 이탈리아(IT), 몰타(MT), 네덜란드(NL), 폴란드(PL), 포르투갈(PT), 슬로베니아(SI), 스페인(ES), 스웨덴(SE)

VIN

해당 없음

그램-리치-블라일리법(GLBA)

BANK_ACCOUNT

미국(US)

DRIVERS_LICENSE

미국(US)

NAME

미국(US)

NATIONAL_IDENTIFIER

미국(US)

PASSPORT

미국(US)

PAYMENT_CARD

해당 없음

STREET_ADDRESS

미국(US)

TAX_IDENTIFIER

미국(US)

건강 보험 양도 및 책임에 관한 법률(HIPAA)

ADMINISTRATIVE_AREA_1

미국(US)

ADMINISTRATIVE_AREA_2

미국(US)

AGE

해당 없음

CITY

미국(US)

DATE_OF_BIRTH

해당 없음

EMAIL

해당 없음

ETHNICITY

해당 없음

IMEI

해당 없음

IP_ADDRESS

해당 없음

MEDICAL_DATA

해당 없음

MEDICAL_SPECIALTY

해당 없음

NAME

해당 없음

NATIONAL_IDENTIFIER

미국(US)

PHONE_NUMBER

미국(US)

POSTAL_CODE

미국(US)

STREET_ADDRESS

미국(US)

URL

해당 없음

VIN

해당 없음

결제 카드 산업(PCI)

PAYMENT_CARD

해당 없음

개인 식별 정보(PII)

DATE_OF_BIRTH

해당 없음

DRIVERS_LICENSE

해당 없음

EMAIL

해당 없음

NAME

해당 없음

NATIONAL_IDENTIFIER

해당 없음

PHONE_NUMBER

해당 없음

STREET_ADDRESS

해당 없음

TAX_IDENTIFIER

해당 없음

SQL을 사용하여 분류 결과 확인

SQL을 통해 시스템 함수를 호출하거나 Account Usage 뷰를 쿼리하여 데이터 분류 결과를 확인할 수 있습니다.

특정 테이블에 대한 분류 결과 검색

SYSTEM$GET_CLASSIFICATION_RESULT 함수를 호출하여 특정 테이블에 대한 결과를 확인합니다.

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

분류 프로세스가 완료될 때까지 결과가 제공되지 않습니다. 자동 분류 프로세스는 데이터베이스에 분류 프로필을 설정한 후 1시간이 경과해야 시작됩니다.

최신 분류 결과 쿼리

최신 분류 결과를 확인하려면 DATA_CLASSIFICATION_LATEST 뷰를 쿼리합니다. 최신 분류 결과 이전의 분류 결과는 표시되지 않습니다. 예를 들어, SNOWFLAKE.GOVERNANCE_VIEWER 데이터베이스 역할이 부여된 역할을 사용할 수 있습니다. ACCOUNTADMIN 권한을 사용할 수 있는 역할 또는 SNOWFLAKE 데이터베이스에 대한 IMPORTED PRIVILEGES 권한이 있는 역할 등 다른 권한을 통해서도 액세스할 수 있습니다.

SELECT * FROM SNOWFLAKE.ACCOUNT_USAGE.DATA_CLASSIFICATION_LATEST;

분류가 완료된 후 3시간이 지나야 결과가 표시될 수 있습니다. 이전 분류 결과를 확인하려면 분류 기록 쿼리 섹션을 참조하세요.

분류 기록 쿼리

지난 365일 동안의 모든 분류 이벤트를 확인하려면 DATA_CLASSIFICATION_HISTORY 뷰를 쿼리합니다. 예를 들어, SNOWFLAKE.GOVERNANCE_VIEWER 데이터베이스 역할이 부여된 역할을 사용할 수 있습니다. ACCOUNTADMIN 권한을 사용할 수 있는 역할 또는 SNOWFLAKE 데이터베이스에 대한 IMPORTED PRIVILEGES 권한이 있는 역할 등 다른 권한을 통해서도 액세스할 수 있습니다.

SELECT * FROM SNOWFLAKE.ACCOUNT_USAGE.DATA_CLASSIFICATION_HISTORY;

다음 예제를 사용하여 분류 기록을 쿼리합니다.

데이터베이스, 스키마 및 테이블 이름을 기준으로 분류 기록 필터링

다음 예제에서는 데이터베이스 이름, 스키마 이름, 테이블 이름을 가장 최근 순서부터 가장 오래된 순서대로 필터링하여 특정 테이블에 대한 모든 분류 이벤트를 반환합니다.

SELECT
    database_id,
    database_name,
    schema_id,
    schema_name,
    table_id,
    table_name,
    trigger_type,
    classified_on,
    table_deleted_on,
    result
  FROM SNOWFLAKE.ACCOUNT_USAGE.DATA_CLASSIFICATION_HISTORY
  WHERE database_name = 'MY_DB'
    AND schema_name = 'MY_SCHEMA'
    AND table_name = 'EMPLOYEES'
  ORDER BY classified_on DESC;

출력은 동일한 EMPLOYEES 테이블에 대해 EMAIL 열을 식별한 2025년 2월의 수동 분류 열 및 EMAIL과 SSN 열 모두를 식별한 2025년 3월 이후의 자동 분류의 두 분류 이벤트를 보여줍니다. 결과는 가장 최근 순서부터 가장 오래된 순서로 정렬되어 시간이 지남에 따라 분류 결과가 어떻게 발전할 수 있는지 보여줍니다.

+-------------+---------------+-----------+-------------+----------+------------+---------------------+---------------------------+----------------+--------------------------------+
| DATABASE_ID | DATABASE_NAME | SCHEMA_ID | SCHEMA_NAME | TABLE_ID | TABLE_NAME | TRIGGER_TYPE        | CLASSIFIED_ON             | TABLE_DELETED_ON | RESULT                         |
+-------------+---------------+-----------+-------------+----------+------------+---------------------+---------------------------+----------------+--------------------------------+
| 10          | MY_DB         | 100       | MY_SCHEMA   | 1234     | EMPLOYEES  | AUTO CLASSIFICATION | 2025-03-01 08:00:00 -0800 | NULL           | {"EMAIL": {...}, "SSN": {...}} |
| 10          | MY_DB         | 100       | MY_SCHEMA   | 1234     | EMPLOYEES  | MANUAL              | 2025-02-15 14:30:00 -0800 | NULL           | {"EMAIL": {...}}               |
+-------------+---------------+-----------+-------------+----------+------------+---------------------+---------------------------+----------------+--------------------------------+

테이블 ID를 기준으로 필터링

다음 예제에서는 테이블 ID를 기준으로 분류 기록을 필터링하여 특정 테이블에 대한 모든 분류 이벤트를 가장 최근 순서부터 가장 오래된 순서로 반환합니다.

참고

ID를 기준으로 필터링하면 분류 후 테이블 이름이 변경된 경우 유용할 수 있습니다.

SELECT
    database_id,
    database_name,
    schema_id,
    schema_name,
    table_id,
    table_name,
    trigger_type,
    classified_on,
    table_deleted_on,
    result
  FROM SNOWFLAKE.ACCOUNT_USAGE.DATA_CLASSIFICATION_HISTORY
  WHERE table_id = 1234
  ORDER BY classified_on DESC;

이벤트 간에 테이블 이름이 EMPLOYEES에서 EMPLOYEES_NEW로 변경된 경우라도 출력은 동일한 테이블(ID 1234)에 대해 두 개의 분류 이벤트를 보여줍니다. 쿼리가 이름이 아닌 테이블 ID를 기준으로 필터링하기 때문에 이름 변경과 관계없이 두 이벤트가 모두 반환됩니다.

+-------------+---------------+-----------+-------------+----------+---------------+---------------------+---------------------------+----------------+--------------------------------+
| DATABASE_ID | DATABASE_NAME | SCHEMA_ID | SCHEMA_NAME | TABLE_ID | TABLE_NAME    | TRIGGER_TYPE        | CLASSIFIED_ON             | TABLE_DELETED_ON | RESULT                         |
+-------------+---------------+-----------+-------------+----------+---------------+---------------------+---------------------------+----------------+--------------------------------+
| 10          | MY_DB         | 100       | MY_SCHEMA   | 1234     | EMPLOYEES_NEW | AUTO CLASSIFICATION | 2025-03-01 08:00:00 -0800 | NULL           | {"EMAIL": {...}, "SSN": {...}} |
| 10          | MY_DB         | 100       | MY_SCHEMA   | 1234     | EMPLOYEES     | MANUAL              | 2025-02-15 14:30:00 -0800 | NULL           | {"EMAIL": {...}}               |
+-------------+---------------+-----------+-------------+----------+---------------+---------------------+---------------------------+----------------+--------------------------------+

지난 7일 동안의 분류 이벤트 계산

다음 예제에서는 지난 7일 동안의 분류 이벤트 수를 보여줍니다.

SELECT
    COUNT(*) AS classification_count
  FROM SNOWFLAKE.ACCOUNT_USAGE.DATA_CLASSIFICATION_HISTORY
  WHERE classified_on >= DATEADD(DAY, -7, CURRENT_TIMESTAMP());
+----------------------+
| CLASSIFICATION_COUNT |
+----------------------+
| 42                   |
+----------------------+

한 테이블에 대한 분류 실행 비교

다음 예제에서는 테이블에 대한 가장 최근의 두 분류 실행을 비교하고 실행 간에 분류가 변경된 열만 반환합니다. 결과의 각 행에는 다음 값 중 하나가 있는 change_type 열이 포함됩니다.

  • ADDED: 열이 이전 실행에서 분류되지 않았습니다. PREV_* 열은 NULL입니다.

  • REMOVED: 열이 이전 실행에서는 분류되었지만 현재 실행에서는 분류되지 않았습니다. CURR_* 열은 NULL입니다.

  • CHANGED: 열은 두 실행 모두에 존재하지만 의미 체계 또는 개인정보 보호 카테고리가 다릅니다.

두 실행에서 분류가 동일한 열은 결과에서 제외됩니다.

WITH ranked AS (
    SELECT
        table_id,
        database_id,
        schema_id,
        database_name,
        schema_name,
        table_name,
        classified_on,
        trigger_type,
        result,
        ROW_NUMBER() OVER (PARTITION BY table_id ORDER BY classified_on DESC) AS rn
      FROM SNOWFLAKE.ACCOUNT_USAGE.DATA_CLASSIFICATION_HISTORY
      WHERE table_id = 1234
    ),
  curr_cols AS (
      SELECT r.table_id, r.database_id, r.schema_id,
          r.database_name, r.schema_name, r.table_name,
          r.classified_on, r.trigger_type,
          c.key AS column_name, c.value AS column_result
        FROM ranked r, LATERAL FLATTEN(input => r.result) c
        WHERE r.rn = 1
  ),
  prev_cols AS (
      SELECT r.table_id,
          r.classified_on, r.trigger_type,
          c.key AS column_name, c.value AS column_result
        FROM ranked r, LATERAL FLATTEN(input => r.result) c
        WHERE r.rn = 2
  )
  SELECT
      curr.database_id,
      curr.database_name,
      curr.schema_id,
      curr.schema_name,
      curr.table_id,
      curr.table_name,
      prev.classified_on AS previous_classified_on,
      curr.classified_on AS current_classified_on,
      COALESCE(curr.column_name, prev.column_name) AS column_name,
      CASE
        WHEN prev.column_name IS NULL THEN 'ADDED'
        WHEN curr.column_name IS NULL THEN 'REMOVED'
        ELSE 'CHANGED'
      END AS change_type,
      prev.column_result:recommendation.semantic_category::STRING AS prev_semantic_category,
      curr.column_result:recommendation.semantic_category::STRING AS curr_semantic_category,
      prev.column_result:recommendation.privacy_category::STRING AS prev_privacy_category,
      curr.column_result:recommendation.privacy_category::STRING AS curr_privacy_category
    FROM curr_cols curr
    FULL OUTER JOIN prev_cols prev
      ON curr.table_id = prev.table_id
      AND curr.column_name = prev.column_name
    WHERE prev.column_name IS NULL
      OR curr.column_name IS NULL
      OR curr.column_result:recommendation.semantic_category != prev.column_result:recommendation.semantic_category
      OR curr.column_result:recommendation.privacy_category != prev.column_result:recommendation.privacy_category
    ORDER BY column_name;

출력에는 가장 최근의 두 실행 간에 분류가 변경된 3개의 열이 표시됩니다. DATE_OF_BIRTH 및 SSN은 현재 실행에서 새로 식별되었고(ADDED), PHONE은 이전 실행에서는 분류되었지만 현재 실행에서는 더 이상 나타나지 않습니다(REMOVED). 두 실행에서 분류가 동일하게 유지된 열(예: EMAIL)은 결과에서 제외됩니다.

+-------+---------+-----------+-------------+----------+------------+---------------------+---------------------+---------------+-------------+---------------+---------------+--------------+------------------+
| DB_ID | DB_NAME | SCHEMA_ID | SCHEMA_NAME | TABLE_ID | TABLE_NAME | PREV_CLASSIFIED_ON  | CURR_CLASSIFIED_ON  | COLUMN_NAME   | CHANGE_TYPE | PREV_SEMANTIC | CURR_SEMANTIC | PREV_PRIVACY | CURR_PRIVACY     |
+-------+---------+-----------+-------------+----------+------------+---------------------+---------------------+---------------+-------------+---------------+---------------+--------------+------------------+
| 10    | MY_DB   | 100       | MY_SCHEMA   | 1234     | EMPLOYEES  | 2025-02-15 14:30:00 | 2025-03-01 08:00:00 | DATE_OF_BIRTH | ADDED       | NULL          | DATE_OF_BIRTH | NULL         | QUASI_IDENTIFIER |
| 10    | MY_DB   | 100       | MY_SCHEMA   | 1234     | EMPLOYEES  | 2025-02-15 14:30:00 | 2025-03-01 08:00:00 | PHONE         | REMOVED     | PHONE_NUMBER  | NULL          | IDENTIFIER   | NULL             |
| 10    | MY_DB   | 100       | MY_SCHEMA   | 1234     | EMPLOYEES  | 2025-02-15 14:30:00 | 2025-03-01 08:00:00 | SSN           | ADDED       | NULL          | US_SSN        | NULL         | IDENTIFIER       |
+-------+---------+-----------+-------------+----------+------------+---------------------+---------------------+---------------+-------------+---------------+---------------+--------------+------------------+

JSON 열에 대한 분류 결과 확인

Snowflake는 반정형 데이터가 JSON 형식인 경우 ARRAY, VARIANT, OBJECT 타입의 열을 분류할 수 있습니다. 이 분류의 결과에는 다음과 같은 특징이 있습니다.

  • 결과 오브젝트에 object_path_results 필드가 포함됩니다. 이 필드에는 오브젝트가 나열되며, 여기서 각 오브젝트는 네이티브 의미 체계 카테고리로 분류된 반정형 데이터의 필드에 해당합니다.

  • 반정형 데이터의 필드에 민감한 데이터가 포함된 경우 *열*의 의미 체계 카테고리는 ``MULTIPLE``입니다. 반정형 데이터에서 필드의 의미 체계 카테고리를 얻으려면 결과에서 object_path_results 필드를 사용합니다.

예를 들어, Snowflake가 다음 테이블을 분류한다고 가정해 보겠습니다.

+-----------------------------------------------------------+---------------+-----------------------------------------------------+
| ARRAY_COL                                                 | FIRST_NAME    | OBJECT_COL                                          |
+-----------------------------------------------------------+---------------+-----------------------------------------------------+
| [ { "email": "alice@example.com" }, { "email": "b..." } ] | "Joe"         | { "email": "jane@domain.com", "phone": "206-..." }  |
+-----------------------------------------------------------+---------------+-----------------------------------------------------+

분류 결과는 다음과 같을 수 있습니다.

{
  "ARRAY_COL": {
    "object_path_results": {
      "ARRAY_COL:[$$].email": {
        "alternates": [],
        "recommendation": {
          "confidence": "HIGH",
          "coverage": 1,
          "details": [],
          "privacy_category": "IDENTIFIER",
          "semantic_category": "EMAIL"
        }
      }
    },
    "recommendation": {
      "confidence": "HIGH",
      "details": [],
      "privacy_category": "IDENTIFIER",
      "semantic_category": "MULTIPLE"
    },
    "valid_value_ratio": 1
  },
  "FIRST_NAME": {
    "alternates": [],
    "recommendation": {
      "confidence": "HIGH",
      "coverage": 1,
      "details": [],
      "privacy_category": "IDENTIFIER",
      "semantic_category": "NAME"
    },
    "valid_value_ratio": 1
  },
  "OBJECT_COL": {
    "object_path_results": {
      "OBJECT_COL:email": {
        "alternates": [],
        "recommendation": {
          "confidence": "HIGH",
          "coverage": 1,
          "details": [],
          "privacy_category": "IDENTIFIER",
          "semantic_category": "EMAIL"
        }
      },
      "OBJECT_COL:phone": {
        "alternates": [],
        "recommendation": {
          "confidence": "HIGH",
          "coverage": 1,
          "details": [
            {
              "coverage": 1,
              "semantic_category": "US_PHONE_NUMBER"
            },
            {
              "coverage": 1,
              "semantic_category": "JP_PHONE_NUMBER"
            }
          ],
          "privacy_category": "IDENTIFIER",
          "semantic_category": "PHONE_NUMBER"
        }
      }
    },
    "recommendation": {
      "confidence": "HIGH",
      "details": [],
      "privacy_category": "IDENTIFIER",
      "semantic_category": "MULTIPLE"
    },
    "valid_value_ratio": 1
  }
}

태그를 사용하여 민감한 데이터 추적하기

Snowflake는 민감한 데이터를 분류할 때 민감한 데이터가 포함된 열에 시스템 정의 및 사용자 정의 태그를 제안하거나 자동으로 적용합니다. 민감한 데이터가 있는 열에는 이러한 태그가 할당되므로 쿼리를 실행하고 태그를 추적하는 함수를 호출하여 민감한 데이터를 모니터링할 수 있습니다.

예를 들어 분류되고 의미 체계 카테고리가 할당된 모든 열을 나열하려면 다음 쿼리를 실행하면 됩니다.

SELECT * FROM SNOWFLAKE.ACCOUNT_USAGE.TAG_REFERENCES
  WHERE TAG_NAME = 'SEMANTIC_CATEGORY'
  ORDER BY object_database, object_schema, object_name, column_name;

hr_data 테이블의 fname 열에 할당된 의미 체계 카테고리를 확인하려는 경우 다음 쿼리를 실행하여 SEMANTIC_CATEGORY 태그의 값을 얻을 수 있습니다.

SELECT SYSTEM$GET_TAG(
    'SNOWFLAKE.CORE.SEMANTIC_CATEGORY',
    'hr_data.fname',
    'COLUMN'
    );

태그를 추적하는 다양한 방법에 대한 자세한 내용은 오브젝트 태그 모니터링하기 섹션을 참조하세요.