Utiliser SQL pour définir la classification des données sensibles

Les sections suivantes décrivent comment utiliser SQL pour configurer la classification automatique des données sensibles au sein d’une base de données. Si vous souhaitez utiliser une interface Web pour paramétrer la classification des données sensibles, voir Utiliser le Centre de confiance pour définir la classification des données sensibles.

La procédure pour utiliser SQL afin de classifier les données sensibles est la suivante :

  1. Créez un profil de classification qui contrôle ce qui se passe lors de la classification des données sensibles.

  2. Définissez le profil de classification sur une base de données ou un schéma pour classifier automatiquement les tables de l’entité.

Pour des exemples de bout en bout de ce workflow, voir Exemples.

À propos des profils de classification

Un profil de classification définit les critères utilisés pour classifier automatiquement les tables d’une base de données. Ces critères comprennent :

  • Durée pendant laquelle une table doit exister avant d’être classée automatiquement.

  • Combien de temps avant que les tables précédemment classées ne soient reclassées ?

  • Si les balises du système et les balises personnalisées sont automatiquement ensemble sur les colonnes après la classification. Vous pouvez décider si vous souhaitez que Snowflake applique automatiquement les balises suggérées ou si vous préférez examiner les attributions de balises proposées, puis les appliquer vous-même.

  • Un mappage entre les balises de classification du système et les balises des objets définis par l’utilisateur afin que les balises définies par l’utilisateur puissent être appliquées automatiquement.

  • Si des classificateurs personnalisés sont utilisés pour classifier les données.

Lorsque un ingénieur des données affecte le profil de classification à une base de données, les données sensibles des tables qui appartiennent à la base de données sont automatiquement classifiées selon la planification définie par le profil. Un ingénieur des données peut attribuer le même profil de classification à plusieurs bases de données, ou créer plusieurs profils de classification pour définir des critères de classification différents pour différentes bases de données.

Pour utiliser SQL pour créer un profil de classification, exécutez la commande CREATE CLASSIFICATION_PROFILE pour créer une instance de la CLASSIFICATION_PROFILE classe.

Pour un exemple d’utilisation de la commande CREATE CLASSIFICATION_PROFILE pour créer un profil de classification, voir Exemples.

À propos du mappage des balises

Vous pouvez utiliser le profil de classification pour mapper les balises du système SEMANTIC_CATEGORY à une ou plusieurs balises d’objet. Ce mappage de balises permet d’attribuer automatiquement à une colonne contenant des données sensibles une balise définie par l’utilisateur en fonction de sa classification. Le mappage des balises peut être ajouté lors de la création du profil de classification ou ultérieurement en appelant la méthode <classification_profile_name>!SET_TAG_MAP.

Que vous définissiez le mappage des balises lors de la création du profil de classification ou après, le contenu du mappage est spécifié en tant qu’objet JSON. Cet objet JSON contient la clé 'column_tag_map', qui est un tableau d’objets spécifiant une balise définie par l’utilisateur, la valeur de la chaîne de cette balise et les catégories sémantiques auxquelles la balise est mappée.

Voici un exemple de mappage de balises :

'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

Sur la base de ce mappage, si vous avez une colonne d’adresses e-mail et que le processus de classification détermine que la colonne contient ces adresses, la balise tag_db.sch.pii = 'Confidential' est ensemble sur la colonne contenant les adresses e-mail.

Si votre mappage de balises comprend plusieurs objets JSON qui mappent des balises, des valeurs de balises et des valeurs de catégories, l’ordre des objets JSON détermine quelle balise et quelle valeur doivent être définies sur la colonne en cas de conflit. Spécifiez les objets JSON dans l’ordre d’affectation souhaité, de gauche à droite, ou de haut en bas si vous formatez JSON.

Astuce

Chaque objet du champ column_tag_map n’a qu’une seule clé obligatoire : tag_name. Si vous omettez les clés tag_value et semantic_categories, la balise définie par l’utilisateur est appliquée à chaque colonne à laquelle la balise du système SEMANTIC_CATEGORY est appliquée, et la valeur de la balise définie par l’utilisateur correspondra à la valeur de la balise SEMANTIC_CATEGORY pour une colonne donnée.

En cas de conflit entre une balise attribuée manuellement et une balise appliquée par la classification automatique, une erreur se produit. Pour obtenir des informations sur le suivi de ces erreurs, voir Dépannage de la classification des données sensibles.

Définir un profil de classification sur une base de données

Mettre en œuvre la classification des données sensibles en configurant un profil de classification sur une base de données. Une fois que vous avez configuré le profil de classification sur la base de données, toutes les tables et vues de cette base de données sont automatiquement contrôlées par la classification des données sensibles.

Vous pouvez également configurer une classification sur un schéma. Si vous configurez un profil de classification sur un schéma qui existe dans une base de données qui est également associée à un profil de classification, le profil configuré sur le schéma remplace le profil configuré sur la base de données.

Pour définir un profil de classification, utilisez une commande ALTER DATABASE ou ALTER SCHEMA pour définir le paramètre CLASSIFICATION_PROFILE. Par exemple, pour configurer un profil de classification my_profile afin que toutes les tables et vues dans la base de données my_db soient contrôlées par la classification des données sensibles, exécutez la commande suivante :

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

Contrôle d’accès

Voici les privilèges et les rôles qui vous permettent de travailler avec les profils de classification et d’activer la classification des données sensibles.

Tâche

Privilèges/rôles exigés

Remarques

Créer un profil de classification

Rôle de base de données SNOWFLAKE.CLASSIFICATION_ADMIN

Pour des informations sur l’attribution de ce rôle de base de données à d’autres rôles, voir À l’aide des rôles de base de données SNOWFLAKE.

CREATESNOWFLAKE.DATA_PRIVACY.CLASSIFICATION_PROFILE sur le schéma

Vous devez disposer de ce privilège sur le schéma dans lequel vous souhaitez créer l’instance de profil de classification.

USAGE sur la base de données et le schéma

Vous devez disposer de privilèges sur le schéma dans lequel vous souhaitez créer l’instance de profil de classification.

Définir le profil de classification d’une base de données/d’un schéma

Un des éléments suivants :

  • EXECUTEAUTOCLASSIFICATION sur le compte

  • EXECUTE AUTO CLASSIFICATION sur une base de données/un schéma

Par défaut, le propriétaire de la base de données/du schéma a le privilège EXECUTE AUTO CLASSIFICATION sur la base de données/le schéma.

Tout privilège sur la base de données du schéma

Si vous définissez un profil de classification sur un schéma, vous devez disposer d’au moins un privilège sur la base de données qui contient ce schéma.

Tout privilège sur la base de données/le schéma

Vous devez disposer d’au moins un privilège sur la base de données/le schéma qui contient la table que vous souhaitez classer automatiquement. Le privilège EXECUTE AUTO CLASSIFICATION répond à cette exigence.

Un des éléments suivants :

  • OWNERSHIP sur l’instance de profil de classification.

  • <classification_profile>!PRIVACY_USER rôle d’instance sur le profil de classification.

Pour des informations sur l’attribution du rôle d’instance PRIVACY_USER à d’autres rôles, voir Rôles des instances.

APPLY TAG sur le compte

Appeler les méthodes sur une instance de profil de classification

<classification_profile>!PRIVACY_USER rôle de l’instance

Pour des informations sur l’attribution de ce rôle d’instance à d’autres rôles, voir Rôles des instances.

Lister les profils de classification

<classification_profile>!PRIVACY_USER rôle de l’instance

Supprimer les profils de classification

OWNERSHIP sur l’instance de profil de classification

Pour un exemple de l’octroi de ces privilèges et des rôles de base de données au rôle d’un ingénieur des données, voir Exemple de base : Classification automatique des tables dans une base de données.

Exemples

Exemple de base : Classification automatique des tables dans une base de données

Procédez comme suit pour classifier automatiquement une table dans la base de données :

  1. En tant qu’administrateur, donnez à l’ingénieur des données les rôles et privilèges dont il a besoin pour classifier automatiquement les tables dans une base de données.

    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. Passez au rôle d’ingénieur des données :

    USE ROLE data_engineer;
    
    Copy
  3. Créez le profil de classification en tant qu’instance de la 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. Appelez la méthode DESCRIBE sur l’instance pour confirmer ses propriétés :

    SELECT my_classification_profile!DESCRIBE();
    
    Copy
  5. Définissez l’instance du profil de classification sur le schéma, ce qui lance le processus en arrière-plan de surveillance des tables du schéma et de classification automatique des données sensibles.

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

    Note

    Il s’écoule une heure entre le moment où le profil de classification est paramétré sur le schéma et le moment où Snowflake commence à classifier le schéma.

  6. Après une heure d’attente, appelez la procédure stockée SYSTEM$GET_CLASSIFICATION_RESULT pour obtenir les résultats de la classification automatique.

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

Exemple : Utilisation d’un mappage de balises et de classificateurs personnalisés

  1. En tant qu’administrateur, donnez à l’ingénieur des données les rôles et privilèges dont il a besoin pour classifier automatiquement les tables dans une base de données et définir des balises sur les colonnes.

  2. Créez le profil de classification.

    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. Appelez la méthode SET_TAG_MAP sur l’instance pour ajouter un mappage de balises au profil de classification. Cela permet d’appliquer automatiquement des balises personnalisées sur les colonnes qui contiennent des données sensibles.

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

    Vous auriez également pu ajouter cette carte de balise lors de la création du profil de classification.

  4. Appelez la méthode SET_CUSTOM_CLASSIFIERS pour ajouter des classificateurs personnalisés au profil de classification. Cela permet de classer automatiquement les données sensibles selon des catégories sémantiques et de confidentialité définies par l’utilisateur.

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

    Vous auriez également pu ajouter les classificateurs personnalisés lors de la création du profil de classification.

  5. Appelez la méthode DESCRIBE sur l’instance pour confirmer que le mappage des balises et les classificateurs personnalisés ont été ajoutés au profil de classification.

    SELECT my_classification_profile!DESCRIBE();
    
    Copy
  6. Définissez l’instance du profil de classification sur la base de données.

    ALTER DATABASE mydb
     SET CLASSIFICATION_PROFILE = 'mydb.sch.my_classification_profile';
    
    Copy
  7. Attachez une politique de masquage à la balise tag_db.sch.pii pour activer le masquage basé sur les balises.

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

Exemple : Test d’un profil de classification avant d’activer la classification automatique

  1. En tant qu’administrateur, donnez à l’ingénieur des données les rôles et privilèges dont il a besoin pour classer automatiquement les tables dans un schéma et définir des balises sur les colonnes.

  2. Créez le profil de classification avec un mappage de balises et des classificateurs personnalisés :

    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. Appelez la procédure stockée SYSTEM$CLASSIFY pour tester les mappages de balises sur la table table1 avant d’activer la classification automatique.

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

    La clé tags de la sortie contient des informations sur la définition de la balise (true si elle est définie, false sinon), le nom de la balise définie et la valeur de la balise :

    {
      "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. Après avoir vérifié que la classification automatique basée sur le profil de classification donnera le résultat souhaité, définissez l’instance du profil de classification sur la base de données.

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