Use SQL to set up sensitive data classification

As seções a seguir descrevem como usar o SQL para configurar a classificação automática de dados confidenciais em um banco de dados. Se você quiser usar uma interface da web para configurar a classificação de dados confidenciais, consulte Usar o Trust Center para configurar a classificação de dados confidenciais.

The basic workflow for using SQL to classify sensitive data consists of the following steps:

  1. Create a classification profile that controls what happens during sensitive data classification.

  2. Set the classification profile on a database or schema to automatically classify tables in the entity.

Para obter exemplos completos desse fluxo de trabalho, consulte Exemplos.

Sobre os perfis de classificação

A classification profile defines the criteria that are used to automatically classify tables in a database. This criteria includes:

  • Quanto tempo uma tabela deve existir antes de ser classificada automaticamente.

  • Quanto tempo antes as tabelas classificadas anteriormente devem ser reclassificadas.

  • Se as tags personalizadas e do sistema são definidas automaticamente nas colunas após a classificação. Você pode decidir se deseja que o Snowflake aplique automaticamente as tags sugeridas ou se prefere revisar as atribuições de tag propostas e depois aplicá-las você mesmo.

  • Um mapeamento entre as tags de classificação do sistema e as tags de objetos definidos pelo usuário para que as tags definidas pelo usuário possam ser aplicadas automaticamente.

  • Se classificadores personalizados são ou não usados para classificar os dados.

When a data engineer assigns the classification profile to a database, sensitive data in the tables that belong to the database is automatically classified on the schedule defined by the profile. A data engineer can assign the same classification profile to multiple databases, or create multiple classification profiles to set different classification criteria for different databases.

To use SQL to create a classification profile, run the CREATE CLASSIFICATION_PROFILE command to create an instance of the CLASSIFICATION_PROFILE class.

For an example of using the CREATE CLASSIFICATION_PROFILE command to create a classification profile, see Exemplos.

Sobre o mapeamento de tags

You can use the classification profile to map SEMANTIC_CATEGORY system tags to one or more object tags. With this tag mapping, a column with sensitive data can be automatically assigned a user-defined tag based on its classification. The tag map can be added while creating the classification profile or later by calling the <classification_profile_name>!SET_TAG_MAP method.

Regardless of whether you are defining the tag map while creating the classification profile or after, the contents of the map are specified as a JSON object. This JSON object contains the 'column_tag_map' key, which is an array of objects that specify a user-defined tag, the string value of that tag, and the semantic categories to which the tag is being mapped.

A seguir, um exemplo de um mapeamento de tags:

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

Com base nesse mapeamento, se você tiver uma coluna de endereços de e-mail e o processo de classificação determinar que a coluna contém esses endereços, a tag tag_db.sch.pii = 'Confidential' será definida na coluna que contém os endereços de e-mail.

Se o seu mapeamento de tags incluir vários objetos JSON que mapeiam tags, valores de tags e valores de categorias, a ordem dos objetos JSON determinará qual tag e qual valor serão definidos na coluna se houver um conflito. Especifique os objetos JSON na ordem de atribuição desejada, da esquerda para a direita, ou de cima para baixo, se estiver formatando JSON.

Dica

Cada objeto no campo column_tag_map tem apenas uma chave obrigatória: tag_name. Se você omitir as chaves tag_value e semantic_categories, a tag definida pelo usuário será aplicada a todas as colunas às quais a tag do sistema SEMANTIC_CATEGORY for aplicada, e o valor da tag definida pelo usuário corresponderá ao valor da tag SEMANTIC_CATEGORY de uma determinada coluna.

If there is a conflict with a manually assigned tag and a tag applied by automatic classification, an error occurs. For information about tracking these errors, see Solução de problemas de classificação de dados confidenciais.

Definir um perfil de classificação em um banco de dados

Implement sensitive data classification by setting a classification profile on a database. After you set the classification profile on the database, all tables and views within that database are automatically monitored by sensitive data classification.

Você também pode definir uma classificação em um esquema. Se você definir um perfil de classificação em um esquema existente em um banco de dados que também esteja associado a um perfil de classificação, o perfil definido no esquema substituirá o definido no banco de dados.

To set a classification profile, use an ALTER DATABASE or ALTER SCHEMA command to set the CLASSIFICATION_PROFILE parameter. For example, to set a classification profile my_profile so all tables and views in the my_db database are monitored by sensitive data classification, run the following command:

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

Controle de acesso

Here are the privileges and roles that let you work with classification profiles and enable sensitive data classification.

Tarefa

Privilégios/funções necessários

Notas

Criação de um perfil de classificação

Função de banco de dados SNOWFLAKE.CLASSIFICATION_ADMIN

Para obter informações sobre como conceder essa função de banco de dados a outras funções, consulte Como usar as funções de banco de dados SNOWFLAKE.

CREATESNOWFLAKE.DATA_PRIVACY.CLASSIFICATION_PROFILE no esquema

Você precisa desse privilégio no esquema em que deseja criar a instância do perfil de classificação.

USAGE no banco de dados e no esquema

Você precisa de privilégios no esquema em que deseja criar a instância do perfil de classificação.

Definir o perfil de classificação em um banco de dados/esquema

Um dos seguintes:

  • EXECUTEAUTOCLASSIFICATION na conta

  • EXECUTE AUTO CLASSIFICATION no banco de dados/esquema

Por padrão, o proprietário do banco de dados/esquema tem o privilégio EXECUTE AUTO CLASSIFICATION sobre ele.

Qualquer privilégio no banco de dados do esquema

Ao definir um perfil de classificação em um esquema, você precisa de pelo menos um privilégio no banco de dados que contém esse esquema.

Qualquer privilégio no banco de dados/esquema

Você precisa de pelo menos um privilégio no banco de dados/esquema que contém a tabela que deseja classificar automaticamente. O privilégio EXECUTE AUTO CLASSIFICATION atende a esse requisito.

Um dos seguintes:

  • OWNERSHIP na instância do perfil de classificação.

  • Função de instância <classification_profile>!PRIVACY_USER no perfil de classificação.

Para obter informações sobre como conceder a função de instância PRIVACY_USER a outras funções, consulte Funções de instância.

APPLY TAG na conta

Chame os métodos em uma instância de perfil de classificação

Função de instância <classification_profile>!PRIVACY_USER

Para obter informações sobre como conceder essa função de instância a outras funções, consulte Funções de instância.

Listagem de perfis de classificação

Função de instância <classification_profile>!PRIVACY_USER

Descarte de perfis de classificação

OWNERSHIP na instância do perfil de classificação

Para obter um exemplo de concessão desses privilégios e funções de banco de dados à função de um engenheiro de dados, consulte Exemplo básico: classificação automática de tabelas em um banco de dados.

Exemplos

Exemplo básico: classificação automática de tabelas em um banco de dados

Conclua estas etapas para classificar automaticamente uma tabela no banco de dados:

  1. Como administrador, conceda ao engenheiro de dados as funções e privilégios necessários para classificar automaticamente as tabelas em um banco de dados.

    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;
    
    Copy
  2. Alterne para a função de engenheiro de dados:

    USE ROLE data_engineer;
    
    Copy
  3. Crie o perfil de classificação como uma instância da classe 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': true
        });
    
    Copy
  4. Chame o método DESCRIBE na instância para confirmar suas propriedades:

    SELECT my_classification_profile!DESCRIBE();
    
    Copy
  5. Defina a instância do perfil de classificação no esquema, que inicia o processo em segundo plano de monitoramento das tabelas no esquema e as classifica automaticamente quanto a dados confidenciais.

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

    Nota

    Há um atraso de uma hora entre a configuração do perfil de classificação no esquema e o início da classificação do esquema pelo Snowflake.

  6. Após esperar uma hora, chame o procedimento armazenado SYSTEM$GET_CLASSIFICATION_RESULT para obter os resultados da classificação automática.

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

Exemplo: uso de um mapeamento de tags e classificadores personalizados

  1. Como administrador, conceda ao engenheiro de dados as funções e privilégios necessários para classificar automaticamente as tabelas em um banco de dados e definir tags nas colunas.

  2. Crie o perfil de classificação.

    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': true
        });
    
    Copy
  3. Chame o método SET_TAG_MAP na instância para adicionar um mapeamento de tags ao perfil de classificação. Isso permite que tags personalizadas sejam aplicadas automaticamente em colunas com dados confidenciais.

    CALL my_classification_profile!SET_TAG_MAP(
      {'column_tag_map':[
        {
          'tag_name':'my_db.sch1.pii',
          'tag_value':'sensitive',
          'semantic_categories':['NAME']
        }]});
    
    Copy

    Como alternativa, você poderia ter adicionado esse mapeamento de tags ao criar o perfil de classificação.

  4. Chame o método SET_CUSTOM_CLASSIFIERS para adicionar classificadores personalizados ao perfil de classificação. Isso permite que os dados confidenciais sejam classificados automaticamente com categorias semânticas e de privacidade definidas pelo usuário.

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

    Como alternativa, você poderia ter adicionado os classificadores personalizados ao criar o perfil de classificação.

  5. Chame o método DESCRIBE na instância para confirmar que o mapeamento de tags e os classificadores personalizados foram adicionados ao perfil de classificação.

    SELECT my_classification_profile!DESCRIBE();
    
    Copy
  6. Defina a instância do perfil de classificação no banco de dados.

    ALTER DATABASE mydb
     SET CLASSIFICATION_PROFILE = 'mydb.sch.my_classification_profile';
    
    Copy
  7. Anexe uma política de mascaramento à tag tag_db.sch.pii para ativar o mascaramento baseado em tag.

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

Exemplo: testes de um perfil de classificação antes de ativar a classificação automática

  1. Como administrador, conceda ao engenheiro de dados as funções e os privilégios de que ele precisa para classificar automaticamente as tabelas em um esquema e definir tags nas colunas.

  2. Crie o perfil de classificação com um mapeamento de tags e classificadores personalizados:

    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': true
        'custom_classifiers': {
          'medical_codes': medical_codes!list(),
          'finance_codes': finance_codes!list()
        }
      }
    );
    
    Copy
  3. Chame o procedimento armazenado SYSTEM$CLASSIFY para testar os mapeamentos de tags na tabela table1 antes de ativar a classificação automática.

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

    A chave tags na saída contém os detalhes sobre se a tag foi definida (true se definida, false caso contrário), o nome da tag definida e o valor da tag:

    {
      "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
        }
      }
    }
    
  4. Após verificar se a classificação automática com base no perfil de classificação terá o resultado desejado, defina a instância do perfil de classificação no banco de dados.

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