Visualizar e rastrear os resultados da classificação de dados confidenciais

Este tópico descreve como visualizar e rastrear os resultados da classificação de dados confidenciais e rastrear as tags de classificação para monitorar os dados confidenciais.

Usar o Trust Center para visualizar os resultados da classificação

Para visualizar os resultados da classificação de dados confidenciais no Trust Center, conclua as etapas a seguir:

  1. Faça login no Snowsight como um usuário com os privilégios necessários.

  2. No menu de navegação, selecione Governance & security » Trust Center.

  3. Selecione a guia Data Security.

  4. Faça uma das seguintes opções:

    • Se você quiser obter insights de alto nível sobre a segurança de seus dados confidenciais, selecione a guia Dashboard. Para obter mais informações, consulte Revisar a página Dashboard.

    • Se quiser listar todas as tabelas e exibições que foram classificadas como contendo dados confidenciais, selecione a guia Sensitive objects.

      Quando a página for aberta, selecione uma tabela para ver quais colunas têm dados confidenciais, a categoria semântica dessas colunas e se receberam tags.

Revisar a página Dashboard

A página Dashboard mostra insights de alto nível sobre a segurança de seus dados confidenciais, por exemplo, quantos bancos de dados e tabelas foram classificados. A página contém os seguintes blocos:

Bloco

Descrição

Objects by compliance category

Identifica o número de objetos com dados que podem estar sujeitos a um regulamento ou outro padrão de conformidade, com base no tipo de informações no objeto.

Nota

O mapeamento entre uma categoria de conformidade e as categorias semânticas não é exaustivo. Somente categorias semânticas nativas compatíveis com o Snowflake são mapeadas para uma categoria de conformidade. Para o mapeamento completo, consulte Categorias de conformidade e as respectivas categorias semânticas.

Você é o único responsável por determinar quais regulamentos ou leis se aplicam aos seus dados e garantir sua conformidade com os regulamentos ou as leis aplicáveis.

Objects by semantic category

Identifica as categorias semânticas mais comuns e o número de objetos com dados que pertencem a essas categorias.

Databases monitored by auto-classification

Identifica quais bancos de dados são monitorados pela classificação de dados confidenciais no momento. Um banco de dados é parcialmente monitorado se alguém usou SQL para definir um perfil de classificação diretamente em um esquema no banco de dados, em vez de definir o perfil no nível do banco de dados.

Classification status

Identifica se todos os bancos de dados que estão sendo monitorados em busca de dados confidenciais foram classificados.

Sensitive data masking status

Identifica se os dados confidenciais estão protegidos por uma política de mascaramento. A política de mascaramento pode ser baseada em tags ou uma que foi aplicada manualmente à coluna.

Uma tabela é totalmente mascarada se cada coluna que contém dados confidenciais tem uma política de mascaramento associada a ela. Uma tabela é parcialmente mascarada se apenas algumas colunas contendo dados confidenciais estão associadas a uma política de mascaramento.

Categorias de conformidade e as respectivas categorias semânticas

Nota

Você é o único responsável por determinar quais regulamentos ou leis se aplicam aos seus dados e garantir sua conformidade com os regulamentos ou as leis aplicáveis. As categorias de conformidade na classificação de dados confidenciais foram projetadas para fornecer um kit de ferramentas pronto para uso para ajudar no seu trabalho, mas não são exaustivas. Somente categorias semânticas nativas compatíveis com o Snowflake são mapeadas para uma categoria de conformidade.

Aviso

Os requisitos de dados da HIPAA exigem que as entidades e os associados comerciais cobertos protejam a confidencialidade, integridade e disponibilidade das informações de saúde protegidas (Protected Health Information, PHI) por meio de medidas de proteção administrativas, físicas e técnicas rigorosas. A não conformidade com a HIPAA pode levar a penalidades significativas. As categorias semânticas relacionadas a PHI estão incluídas em Informações confidenciais.

Use a tabela a seguir para entender o bloco Objects by compliance category na página «Dashboard».

Categoria de conformidade

Categoria semântica nativa

Local

Digital Personal Data Protection Act (DPDPA)

DATE_OF_BIRTH

n/a

DRIVERS_LICENSE

Índia (IN)

EMAIL

n/a

NAME

n/a

NATIONAL_IDENTIFIER

Índia (IN)

PHONE_NUMBER

n/a

STREET_ADDRESS

n/a

TAX_IDENTIFIER

Índia (IN)

Regulamento Geral sobre a Proteção de Dados (GDPR)

AGE

n/a

DRIVERS_LICENSE

Áustria (AT), Bélgica (BE), Bulgária (BG), Croácia (HR), Chipre (CY), República Tcheca (CZ), Dinamarca (DK), Estônia (EE), Finlândia (FI), França (FR), Alemanha (DE), Grécia (GR), Hungria (HU), Irlanda (IE), Itália (IT), Letônia (LV), Lituânia (LT), Luxemburgo (LU), Malta (MT), Países Baixos (NL), Polônia (PL), Portugal (PT), Romênia (RO), Eslováquia (SK), Eslovênia (SI), Espanha (ES), Suécia (SE)

EMAIL

n/a

ETHNICITY

n/a

GENDER

n/a

IBAN

n/a

IMEI

n/a

IP_ADDRESS

n/a

NAME

n/a

NATIONAL_IDENTIFIER

Áustria (AT), Bélgica (BE), Bulgária (BG), Croácia (HR), Chipre (CY), República Tcheca (CZ), Dinamarca (DK), Estônia (EE), Finlândia (FI), França (FR), Alemanha (DE), Grécia (GR), Hungria (HU), Irlanda (IE), Letônia (LV), Lituânia (LT), Luxemburgo (LU), Malta (MT), Países Baixos (NL), Polônia (PL), Portugal (PT), Romênia (RO), Eslováquia (SK), Eslovênia (SI), Espanha (ES), Suécia (SE), Reino Unido (UK)

PASSPORT

Áustria (AT), Bélgica (BE), Bulgária (BG), Croácia (HR), Chipre (CY), República Tcheca (CZ), Dinamarca (DK), Estônia (EE), Finlândia (FI), França (FR), Alemanha (DE), Grécia (GR), Hungria (HU), Irlanda (IE), Itália (IT), Letônia (LV), Lituânia (LT), Luxemburgo (LU), Malta (MT), Países Baixos (NL), Polônia (PL), Portugal (PT), Romênia (RO), Eslováquia (SK), Eslovênia (SI), Espanha (ES), Suécia (SE)

PAYMENT_CARD

n/a

PHONE_NUMBER

n/a

SALARY

n/a

TAX_IDENTIFIER

Áustria (AT), Chipre (CY), França (FR), Alemanha (DE), Grécia (GR), Hungria (HU), Itália (IT), Malta (MT), Países Baixos (NL), Polônia (PL), Portugal (PT), Eslovênia (SI), Espanha (ES), Suécia (SE)

VIN

n/a

Gramm-Leach-Bliley Act (GLBA)

BANK_ACCOUNT

Estados Unidos (US)

DRIVERS_LICENSE

Estados Unidos (US)

NAME

Estados Unidos (US)

NATIONAL_IDENTIFIER

Estados Unidos (US)

PASSPORT

Estados Unidos (US)

PAYMENT_CARD

n/a

STREET_ADDRESS

Estados Unidos (US)

TAX_IDENTIFIER

Estados Unidos (US)

Health Insurance Portability and Accountability Act (HIPAA)

ADMINISTRATIVE_AREA_1

Estados Unidos (US)

ADMINISTRATIVE_AREA_2

Estados Unidos (US)

AGE

n/a

CITY

Estados Unidos (US)

DATE_OF_BIRTH

n/a

EMAIL

n/a

ETHNICITY

n/a

IMEI

n/a

IP_ADDRESS

n/a

MEDICAL_DATA

n/a

MEDICAL_SPECIALTY

n/a

NAME

n/a

NATIONAL_IDENTIFIER

Estados Unidos (US)

PHONE_NUMBER

Estados Unidos (US)

POSTAL_CODE

Estados Unidos (US)

STREET_ADDRESS

Estados Unidos (US)

URL

n/a

VIN

n/a

Payment Card Industry (PCI)

PAYMENT_CARD

n/a

Informações de identificação pessoa (PII)

DATE_OF_BIRTH

n/a

DRIVERS_LICENSE

n/a

EMAIL

n/a

NAME

n/a

NATIONAL_IDENTIFIER

n/a

PHONE_NUMBER

n/a

STREET_ADDRESS

n/a

TAX_IDENTIFIER

n/a

Usar SQL para visualizar os resultados da classificação

Você pode usar SQL para visualizar os resultados da classificação de dados chamando uma função do sistema ou consultando uma visualização do uso da conta.

Recuperar os resultados da classificação para uma tabela específica

Chame a função SYSTEM$GET_CLASSIFICATION_RESULT para exibir os resultados de uma tabela específica.

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

Os resultados não ficam disponíveis até que o processo de classificação seja concluído. O processo de classificação automática será iniciado apenas uma hora após a configuração do perfil de classificação no banco de dados.

Consultar os resultados da classificação mais recentes

Para exibir os resultados da classificação mais recentes, consulte a exibição DATA_CLASSIFICATION_LATEST. Os resultados da classificação anteriores aos mais recentes não são mostrados. Por exemplo, você pode usar uma função que recebeu a função de banco de dados SNOWFLAKE.GOVERNANCE_VIEWER. Outros privilégios também podem conceder acesso, como usar ACCOUNTADMIN ou ter IMPORTED PRIVILEGES no banco de dados SNOWFLAKE.

SELECT * FROM SNOWFLAKE.ACCOUNT_USAGE.DATA_CLASSIFICATION_LATEST;

Os resultados podem não aparecer até três horas após a conclusão da classificação. Para exibir os resultados anteriores da classificação, consulte Consultar o histórico de classificação.

Consultar o histórico de classificação

Para visualizar todos os eventos de classificação dos últimos 365 dias, consulte a exibição DATA_CLASSIFICATION_HISTORY. Por exemplo, você pode usar uma função que recebeu a função de banco de dados SNOWFLAKE.GOVERNANCE_VIEWER. Outros privilégios também podem conceder acesso, como usar ACCOUNTADMIN ou ter IMPORTED PRIVILEGES no banco de dados SNOWFLAKE.

SELECT * FROM SNOWFLAKE.ACCOUNT_USAGE.DATA_CLASSIFICATION_HISTORY;

Use os exemplos a seguir para consultar o histórico de classificação:

Filtrar o histórico de classificação por banco de dados, esquema e nome da tabela

O exemplo a seguir retorna todos os eventos de classificação de uma tabela específica filtrando por nome do banco de dados, nome do esquema e nome da tabela, em ordem do mais recente para o mais antigo:

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;

A saída mostra dois eventos de classificação para a mesma tabela EMPLOYEES: uma classificação manual de fevereiro de 2025 que identificou a coluna EMAIL e uma classificação automática posterior de março de 2025 que identificou as colunas EMAIL e SSN. Os resultados são ordenados dos mais recentes para os mais antigos, mostrando como os resultados da classificação podem evoluir ao longo do tempo.

+-------------+---------------+-----------+-------------+----------+------------+---------------------+---------------------------+----------------+--------------------------------+
| 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": {...}}               |
+-------------+---------------+-----------+-------------+----------+------------+---------------------+---------------------------+----------------+--------------------------------+

Filtrar por ID de tabela

O exemplo a seguir filtra o histórico de classificação por ID de tabela para retornar todos os eventos de classificação de uma tabela específica, ordenados pelos mais recentes primeiro:

Nota

A filtragem por ID pode ser útil se a tabela foi renomeada após a classificação.

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;

A saída mostra dois eventos de classificação para a mesma tabela (ID 1234), mesmo que a tabela tenha sido renomeada de EMPLOYEES a EMPLOYEES_NEW entre os eventos. Como a consulta filtra por ID de tabela em vez de nome, ambos os eventos são retornados, independentemente da alteração de nome.

+-------------+---------------+-----------+-------------+----------+---------------+---------------------+---------------------------+----------------+--------------------------------+
| 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": {...}}               |
+-------------+---------------+-----------+-------------+----------+---------------+---------------------+---------------------------+----------------+--------------------------------+

Contar eventos de classificação nos últimos sete dias

O exemplo a seguir mostra o número de eventos de classificação nos últimos sete dias:

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

Comparar as execuções de classificação de uma tabela

O exemplo a seguir compara as duas execuções de classificação mais recentes de uma tabela e retorna apenas as colunas das quais a classificação mudou entre as execuções. Cada linha no resultado inclui uma coluna change_type com um dos seguintes valores:

  • ADDED: a coluna não foi classificada na execução anterior. As colunas PREV_* são NULL.

  • REMOVED: a coluna foi classificada na execução anterior, mas não na execução atual. As colunas CURR_* são NULL.

  • CHANGED: a coluna existe em ambas as execuções, mas sua categoria semântica ou de privacidade é diferente.

As colunas com classificação idêntica em ambas as execuções são excluídas dos resultados.

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;

A saída mostra três colunas das quais a classificação mudou entre as duas execuções mais recentes: DATE_OF_BIRTH e SSN foram recém-identificadas (ADDED) na execução atual, enquanto PHONE foi classificada na execução anterior, mas não aparece mais na execução atual (REMOVED). Colunas com a mesma classificação em ambas as execuções, comoEMAIL, são excluídas dos resultados.

+-------+---------+-----------+-------------+----------+------------+---------------------+---------------------+---------------+-------------+---------------+---------------+--------------+------------------+
| 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       |
+-------+---------+-----------+-------------+----------+------------+---------------------+---------------------+---------------+-------------+---------------+---------------+--------------+------------------+

Visualizar os resultados da classificação para colunas JSON

O Snowflake pode classificar colunas do tipo ARRAY, VARIANT ou OBJECT quando os dados semiestruturados estão em formato JSON. O resultado dessa classificação tem as seguintes características:

  • O objeto resultante contém um campo object_path_results. Esse campo lista objetos, onde cada objeto corresponde a um campo nos dados semiestruturados que foi classificado usando uma categoria semântica nativa.

  • Se um campo nos dados semiestruturados incluir dados confidenciais, a categoria semântica da coluna será MULTIPLE. Para obter a categoria semântica dos campos nos dados semiestruturados, use o campo object_path_results nos resultados.

Como exemplo, suponha que o Snowflake classifique a seguinte tabela:

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

O resultado da classificação pode parecer o seguinte:

{
  "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
  }
}

Usar tags para rastrear dados confidenciais

Quando o Snowflake classifica dados confidenciais, ele sugere ou aplica automaticamente tags definidas pelo sistema e pelo usuário às colunas que contêm dados confidenciais. Como essas tags são atribuídas a colunas com dados confidenciais, você pode monitorar os dados confidenciais executando consultas e chamando funções para rastrear as tags.

Por exemplo, para listar todas as colunas que foram classificadas e atribuídas a uma categoria semântica, você pode executar a seguinte consulta:

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

Se você quiser determinar qual categoria semântica foi atribuída à coluna fname da tabela hr_data, pode executar a seguinte consulta para obter o valor da tag SEMANTIC_CATEGORY:

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

Para obter informações sobre as diferentes maneiras de rastrear tags, consulte Monitorar tags de objeto.