Introdução à classificação¶
Este tópico fornece informações sobre como funciona a classificação.
Neste tópico:
Visão geral¶
A classificação é um processo de múltiplas etapas que associa tags definidas pelo Snowflake (ou seja, tags de sistema) às colunas analisando as células e metadados quanto a dados pessoais; estes dados podem agora ser rastreados por um engenheiro de dados.
Com base nas informações de rastreamento e processos de auditoria relacionados, o engenheiro de dados pode proteger a coluna contendo dados pessoais ou sensíveis com uma política de mascaramento ou a tabela contendo esta coluna com uma política de acesso a linhas.
O resultado geral das etapas de classificação e proteção de dados é facilitar o cumprimento dos regulamentos de privacidade de dados.
Processo¶
Esta seção explica como funciona o processo de classificação em três etapas. Você pode repetir este processo quantas vezes for necessário, como após inserir novas linhas em uma tabela ou adicionar novas colunas a uma tabela.
A classificação simplifica um processo em três etapas: analisar, revisar e aplicar. Cada uma dessas etapas tem operações diferentes:
- Analisar
O engenheiro de dados chama a função EXTRACT_SEMANTIC_CATEGORIES na conta Snowflake. Esta função analisa as colunas em uma tabela e produz as possíveis categorias e probabilidades associadas. O valor da probabilidade indica a probabilidade de que a coluna contenha dados pessoais, conforme definido pelas categorias possíveis. Para obter mais detalhes, consulte Interpretação do resultado da classificação (neste tópico).
Nota
Definições complexas de exibição, tais como exibições que exijam operações JOIN em múltiplos objetos, podem retardar o processo de análise. Antes de classificar uma exibição complexa, considere o warehouse em uso. Para obter mais detalhes, consulte Custos computacionais (neste tópico).
- Revisar
Na etapa de revisão, o engenheiro de dados revisa os resultados da categoria para garantir que os resultados das operações da etapa de análise façam sentido. Se nenhuma revisão for necessária, o engenheiro de dados pode prosseguir para a etapa de aplicação.
Se forem necessárias revisões, o engenheiro de dados pode rever o resultado da etapa de análise antes de passar para a etapa de aplicação.
Para obter mais detalhes, consulte Interpretação do resultado da classificação (neste tópico).
- Aplicar
A etapa de aplicação tem uma operação: atribuir a tag do sistema.
O engenheiro de dados pode definir manualmente uma tag do sistema em uma coluna ou chamar o procedimento armazenado ASSOCIATE_SEMANTIC_CATEGORY_TAGS.
Após atribuir as tags do sistema, o engenheiro de dados pode então rastrear a tag do sistema e proteger os dados pessoais ou sensíveis com uma política de mascaramento ou uma política de acesso a linhas.
Para obter exemplos detalhados deste processo, consulte Como usar a classificação de dados.
Tags de sistema e categorias¶
As tags do sistema são tags que o Snowflake cria, mantém e disponibiliza no banco de dados SNOWFLAKE compartilhado. Existem duas tags de sistema de classificação, ambas delas estão no esquema SNOWFLAKE.CORE
:
SNOWFLAKE.CORE.SEMANTIC_CATEGORY
SNOWFLAKE.CORE.PRIVACY_CATEGORY
O engenheiro de dados atribui estas tags a uma coluna contendo dados pessoais ou sensíveis.
- Valores da cadeia de caracteres.
Snowflake armazena a atribuição de uma tag de sistema em uma coluna como um par chave-valor, onde o valor é uma cadeia de cadeia de caracteres. Snowflake define os valores de cadeia de caracteres permitidos para cada tag do sistema de classificação porque o Snowflake mantém cada uma dessas tags do sistema.
Chame a função SYSTEM$GET_TAG_ALLOWED_VALUES em sua conta Snowflake para ver a lista de valores de cadeia de caracteres de tag suportados pelo sistema de classificação. Por exemplo:
select system$get_tag_allowed_values('snowflake.core.semantic_category'); select system$get_tag_allowed_values('snowflake.core.privacy_category');
Os nomes das tags SEMANTIC_CATEGORY
e PRIVACY_CATEGORY
correspondem às categorias de classificação que Snowflake atribui aos dados da coluna durante o processo de amostragem da coluna (ou seja, os nomes das tags e os nomes das categorias usam as mesmas palavras):
- Categoria semântica
A categoria semântica identifica os atributos pessoais.
Uma lista não exaustiva de atributos pessoais suportada pela classificação incluem nome, idade e sexo. Estes três atributos são possíveis valores de cadeia de caracteres ao atribuir a tag
SEMANTIC_CATEGORY
a uma coluna.- Categoria de privacidade
Se a análise determinar que os dados da coluna correspondem a uma categoria semântica, Snowflake classifica ainda mais a coluna a uma categoria de privacidade. A categoria de privacidade tem três valores: identificador, quase identificador ou sensível. Estes três valores são os valores de cadeia de caracteres que podem ser especificados ao atribuir a tag do sistema de classificação
PRIVACY_CATEGORY
a uma coluna.Identificador: estes atributos identificam de forma única um indivíduo. Os exemplos de atributos incluem nome, número de previdência social e número de telefone.
Os atributos de identificadores são sinônimos de identificadores diretos.
Quase identificador: estes atributos podem identificar de forma única um indivíduo quando dois ou mais destes atributos são combinados. Os atributos de exemplo incluem idade e sexo.
Os quase identificadores são sinônimos de identificadores indiretos.
Sensível: estes atributos não são considerados suficientes para identificar uma pessoa, mas são informações que a pessoa prefere não revelar por razões de privacidade.
Atualmente, o único atributo que Snowflake avalia como sensível é o salário.
A tabela a seguir resume a relação entre cada categoria de classificação e tag do sistema, os valores de cadeia de caracteres permitidos para cada tag do sistema de classificação, e os valores de cadeia de caracteres de tags do sistema para cada tag do sistema:
Valores do rótulo da |
Valores do rótulo da |
---|---|
|
|
|
|
|
|
Nota
Vários valores da cadeia de caracteres do tag semântico de todas as três categorias de privacidade podem ser consideradas “dados pessoais sensíveis”, “categorias especiais de dados”, ou termos similares sob certas leis e normas, e podem exigir proteções ou controles adicionais.
Atualmente, a classificação não marca os dados de coluna como sensíveis e de identificação. Em outras palavras, ao definir a tag do sistema em uma determinada coluna, você deve escolher a tag SEMANTIC_CATEGORY ou PRIVACY_CATEGORY.
Interpretação do resultado da classificação¶
A função EXTRACT_SEMANTIC_CATEGORIES retorna uma VARIANT no formato JSON, que é um formato semi-estruturado, contendo:
Possíveis categorias semânticas e de privacidade maiores que 0,8 serão listadas fora de
extra_info
(consulte a função EXTRACT_SEMANTIC_CATEGORIES) e também são as que são aplicadas pelo procedimento armazenado ASSOCIATE_SEMANTIC_CATEGORY_TAGS.A probabilidade de que o processo de classificação tenha derivado a categoria semântica correta.
Uma lista de categorias semânticas alternativas com as quais a coluna pode ser marcada se a probabilidade estiver abaixo de
0.80
e o processo identifica outras categorias semânticas possíveis com uma probabilidade maior que0.15
. Entretanto, para usar esses valores, é necessário que o engenheiro de dados defina manualmente a tag do sistema ou revise a saída.
Os valores de probabilidade podem ajudar um engenheiro de dados a tomar uma decisão informada sobre se a coluna contém dados pessoais ou sensíveis: quanto maior a probabilidade, maior a probabilidade de que a coluna contenha dados pessoais ou sensíveis.
A seguir, um exemplo simplificado de Classificação de uma única tabela mostrado em Como usar a classificação de dados:
Crie uma tabela:
CREATE TABLE hr_data ( age INTEGER, email_address VARCHAR, fname VARCHAR, lname VARCHAR );
Carregar os dados na tabela e, em seguida, chamar a função EXTRACT_SEMANTIC_CATEGORIES:
USE ROLE data_engineer; SELECT EXTRACT_SEMANTIC_CATEGORIES('hr_data');
Avalie a saída. Por exemplo:
Saída padrão:
SELECT EXTRACT_SEMANTIC_CATEGORIES('hr_data'); +---------------------------------------------+ | EXTRACT_SEMANTIC_CATEGORIES('HR_DATA') | |---------------------------------------------| | { | | "AGE": { | | "extra_info": { | | "alternates": [], | | "probability": "1.00" | | }, | | "privacy_category": "QUASI_IDENTIFIER", | | "semantic_category": "AGE" | | }, | | "EMAIL_ADDRESS": { | | "extra_info": { | | "alternates": [], | | "probability": "1.00" | | }, | | "privacy_category": "IDENTIFIER", | | "semantic_category": "EMAIL" | | }, | | "FNAME": { | | "extra_info": { | | "alternates": [], | | "probability": "1.00" | | }, | | "privacy_category": "IDENTIFIER", | | "semantic_category": "NAME" | | }, | | "LNAME": { | | "extra_info": { | | "alternates": [], | | "probability": "0.97" | | }, | | "privacy_category": "IDENTIFIER", | | "semantic_category": "NAME" | | } | | } | +---------------------------------------------+
Use a função de tabela FLATTEN para melhorar a legibilidade:
SELECT f.key::varchar as column_name, f.value:"privacy_category"::varchar as privacy_category, f.value:"semantic_category"::varchar as semantic_category, f.value:"extra_info":"probability"::number(10,2) as probability, f.value:"extra_info":"alternates"::variant as alternates FROM TABLE(FLATTEN(EXTRACT_SEMANTIC_CATEGORIES('hr_data')::VARIANT)) AS f; +---------------+------------------+-------------------+-------------+------------+ | COLUMN_NAME | PRIVACY_CATEGORY | SEMANTIC_CATEGORY | PROBABILITY | ALTERNATES | |---------------+------------------+-------------------+-------------+------------| | AGE | QUASI_IDENTIFIER | AGE | 1.00 | [] | | EMAIL_ADDRESS | IDENTIFIER | EMAIL | 1.00 | [] | | FNAME | IDENTIFIER | NAME | 1.00 | [] | | LNAME | IDENTIFIER | NAME | 0.97 | [] | +---------------+------------------+-------------------+-------------+------------+
Observe que os valores de alguns campos (como o campo
PROBABILITY
) variam de acordo com as características dos dados e o tamanho da amostra.
Objetos e tipos de dados de coluna com suporte¶
O Snowflake oferece suporte à classificação de dados armazenados em todos os tipos de tabelas e exibições, incluindo tabelas externas, exibições materializadas e exibições seguras.
Você pode classificar a tabela e exibir colunas para todos os tipos de dados com suporte exceto para os seguintes tipos de dados:
GEOGRAPHY
BINARY
VARIANT
Observe que você pode classificar uma coluna com o tipo de dados VARIANT quando o tipo de dados de coluna puder ser convertido em um tipo de dados NUMBER ou STRING. O Snowflake não classifica a coluna se a coluna contém JSON, XML ou outros dados semiestruturados.
Se uma tabela tiver colunas com um tipo de dados sem suporte, ou a coluna tiver todos os valores NULL, o processo de classificação ignora as colunas e não as inclui no resultado.
Importante
Se seus dados representarem valores NULL com um valor diferente de NULL, a precisão dos resultados da classificação pode ser impactada.
Custos computacionais¶
O processo de classificação requer recursos computacionais que são fornecidos pelo warehouse que está em uso e em execução quando a classificação é realizada.
O tempo necessário para classificar os dados em uma tabela/exibição (e, portanto, o número de créditos consumidos pelo warehouse) é uma função da quantidade de dados a serem classificados.
Em particular, se uma tabela/exibição tiver um grande número de colunas compatíveis com a classificação, o tempo de processamento pode ser impactado. No entanto, como regra geral, a velocidade de processamento é proporcional ao tamanho do warehouse. Em outras palavras, cada aumento de tamanho de um warehouse (por exemplo, e X-small para Small) normalmente reduz o tempo de processamento pela metade.
Use as seguintes diretrizes gerais para selecionar um tamanho de warehouse:
Sem preocupação com o tempo de processamento: warehouse X-Small.
Até 100 colunas em uma tabela: warehouse Small.
101 a 300 colunas em uma tabela: warehouse Medium.
301 colunas ou mais em uma tabela: warehouse Large.
Benefícios¶
A classificação proporciona os seguintes benefícios aos administradores de privacidade e governança de dados:
- Acesso aos dados
Os resultados da classificação dos dados da coluna podem dar informações aos administradores de identidade e de acesso para avaliar e manter suas hierarquias de funções do Snowflake para garantir que as funções do Snowflake tenham o acesso apropriado a dados sensíveis ou PII.
- Compartilhamento de dados
O processo de classificação pode ajudar a identificar e confirmar o local de armazenamento dos dados PII. Posteriormente, um provedor de compartilhamento de dados pode usar os resultados da classificação para determinar se deve compartilhar dados e como disponibilizar os dados PII a um consumidor que compartilha dados.
- Aplicação da política
O uso de colunas contendo dados PII, tais como colunas de referência em tabelas de base para criar uma exibição ou exibição materializada, pode ajudar a determinar a melhor abordagem para proteger os dados com uma política de mascaramento ou uma política de acesso a linhas.
Recomendações¶
Para aproveitar o recurso de classificação e otimizar seus recursos de rastreamento de dados PII, faça o seguinte:
- Validação
Consulte primeiro as exibições do Account Usage:
ACCESS_HISTORY: determinar os objetos de exibição e tabela que são acessados com mais frequência.
OBJECT_DEPENDENCIES: determinar referências de metadados entre dois ou mais objetos.
Use os resultados da consulta para priorizar a atribuição das tags do sistema de classificação em nível de esquema ou de banco de dados.
- Nomes de coluna
Use nomes sensíveis de colunas em seus objetos de tabela e treine os criadores de tabelas para aderir às diretrizes de criação de tabelas internas.
- Tipos de dados
Use tipos de dados sensíveis para as colunas. Por exemplo, uma coluna AGE deve ter o tipo de dados NUMBER.
- VARIANT
Se uma coluna tiver um tipo de dados VARIANT, use o comando FLATTEN na coluna antes de classificar a tabela.
- Verificar
Salve os resultados da chamada da função EXTRACT_SEMANTIC_CATEGORIES em uma tabela temporária e verifique novamente os resultados antes de atribuir as tags do sistema de classificação.
Após atribuir as tags do sistema, consulte as exibições TAG_REFERENCES e COLUMNS do Account Usage para inspecionar colunas que não foram classificadas.
Por exemplo, conceda a função do banco de dados GOVERNANCE_VIEWER à função personalizada
data_engineer
e execute estas instruções:use role accountadmin; grant database role governance_viewer to role data_engineer; use role data_engineer; select table_name, table_catalog from snowflake.account_usage.columns c where not exists( select * from snowflake.account_usage.tag_references t where c.column_id = t.column_id ) and deleted is null order by table_catalog;
Use os resultados da consulta para determinar quais catálogos de tabelas (ou seja, bancos de dados) são mais importantes para verificar e priorizar a classificação das tabelas.
- Registros
Crie um registro histórico dos resultados da chamada da função EXTRACT_SEMANTIC_CATEGORIES e os resultados da atribuição das tags do sistema de classificação.
- Warehouse
Utilize o tamanho adequado do warehouse ao classificar os dados. Para obter mais detalhes, consulte Custos computacionais (neste tópico).
Gerenciamento da classificação¶
Referência de privilégios¶
Esta tabela resume os privilégios mínimos necessários para as etapas de análise e revisão de classificação:
Privilégio |
Objeto |
Notas |
---|---|---|
USAGE |
Banco de dados e esquema |
Este privilégio é necessário para que o banco de dados principal e o esquema da tabela que contém as colunas possam ser classificados. |
SELECT , UPDATE |
Tabela |
O privilégio SELECT permite consultar uma tabela, que é necessária para classificar os dados da coluna e para chamar a função EXTRACT_SEMANTIC_CATEGORIES. O privilégio UPDATE permite chamar o procedimento armazenado ASSOCIATE_SEMANTIC_CATEGORY_TAGS para aplicar automaticamente os resultados da classificação às colunas em uma tabela. |
Os privilégios necessários para a etapa aplicar, em especial definir a tag do sistema*, na classificação, dependem da abordagem escolhida. Atualmente, há três opções:
Use a função do banco de dados GOVERNANCE_ADMIN.
Conceda IMPORTED PRIVILEGES a uma função personalizada.
Use a função ACCOUNTADMIN.
- Função de banco de dados
A abordagem da função do banco de dados utiliza a função do banco de dados GOVERNANCE_ADMIN para definir uma tag do sistema de classificação em uma coluna de tabela. Além disso, o engenheiro de dados tem o privilégio global APPLY TAG de colocar tags em objetos que não possuem.
Para fazer isso:
Conceda a função de banco de dados GOVERNANCE_ADMIN a uma função personalizada de sua escolha (por exemplo,
data_engineer
):use role accountadmin; grant database role snowflake.governance_admin to role data_engineer; grant apply tag on account to role data_engineer;
Atribua uma tag de sistema a uma coluna de tabela. Por exemplo, a coluna EMAIL na tabela chamada
hr.tables.empl_info
(ou seja, uma tabela de informações de funcionários no banco de dados de recursos humanos):use role data_engineer; alter table hr.tables.empl_info modify column email set tag snowflake.core.semantic_category = 'email';
O uso da abordagem da função de banco de dados pode ajudar a satisfazer uma exigência do princípio de menos privilégios.
- Função personalizada
A função personalizada (ou seja, a função em nível de conta que você cria) exige a concessão de dois privilégios a uma função de sua escolha. Por exemplo:
use role accountadmin; grant imported privileges on database snowflake to role data_engineer; grant apply tag on account to role data_engineer;
O resultado dessas duas instruções de concessão permite o acesso ao banco de dados compartilhado SNOWFLAKE e a definição de tags do sistema de classificação em qualquer coluna da tabela na conta. Um usuário com a função
data_engineer
pode então definir a tag do sistema de classificação em uma tabela, como mostrado na abordagem da função de banco de dados.No entanto, as duas instruções de concessão nesta abordagem também permitem:
Acesso total para consultar todas as exibições no banco de dados SNOWFLAKE compartilhado.
Definir qualquer etiqueta na conta em qualquer objeto que possa ser marcado na conta.
Se a abordagem de função personalizada não satisfizer a exigência do princípio do privilégio mínimo, use a abordagem de função de banco de dados.
- ACCOUNTADMIN
O uso da função ACCOUNTADMIN não requer nenhuma instrução de concessão adicional, no entanto a função ACCOUNTADMIN é a função mais privilegiada no Snowflake.
Se houver restrições para limitar o uso da função ACCOUNTADMIN em seus ambientes de produção, use a abordagem da função de banco de dados ou a abordagem da função personalizada.
Com relação à proteção de dados em coluna, os privilégios para atribuir uma política de mascaramento ou uma política de acesso a linhas podem ser concedidos à função data_engineer
ou uma função diferente pode ser responsável pela atribuição das políticas. A abordagem que você adota dependerá de como seus administradores preferem conceder privilégios e administrar funções.
Para obter exemplos representativos, consulte Como usar a classificação de dados.
Rastreamento de tags do sistema de classificação¶
O Snowflake fornece exibições e funções incorporadas para rastrear o uso da tag do sistema de classificação:
Para encontrar as colunas com uma tag de sistema em sua conta, consulte a exibição TAG_REFERENCES do Account Usage:
SELECT * FROM SNOWFLAKE.ACCOUNT_USAGE.TAG_REFERENCES WHERE TAG_NAME = 'PRIVACY_CATEGORY' ORDER BY OBJECT_DATABASE, OBJECT_SCHEMA, OBJECT_NAME, COLUMN_NAME;
Para encontrar as colunas com uma tag de sistema para uma tabela ou exibição em um banco de dados específico, chame a função de tabela TAG_REFERENCES do Information Schema:
SELECT * FROM TABLE( my_db.information_schema.tag_references( 'my_db.my_schema.hr_data.fname', 'COLUMN' ) ) ;
Para encontrar cada conjunto de tags em cada coluna de uma tabela ou exibição dentro de um banco de dados específico, chame a função de tabela TAG_REFERENCES_ALL_COLUMNS do Information Schema:
select * from table( my_db.information_schema.tag_references_all_columns( 'my_db.my_schema.hr_data', 'table' ) ) ;
Para encontrar um valor de tag específico para uma coluna, chame a função do sistema SYSTEM$GET_TAG:
select system$get_tag( 'snowflake.core.privacy_category', 'hr_data.fname', 'COLUMN' ) ;
Próximos tópicos: