Classification des données personnalisée

Ce chapitre fournit des concepts sur la classification des données personnalisée dans Snowflake.

Vue d’ensemble

Snowflake fournit la classe CUSTOM_CLASSIFIER dans le schéma SNOWFLAKE.DATA_PRIVACY pour permettre aux ingénieurs des données d’étendre leurs capacités de classification des données en fonction de leur propre connaissance de leurs données. Après avoir créé une instance de la classe, vous pouvez appeler une méthode sur l’instance pour définir votre propre catégorie sémantique, déterminer la catégorie de confidentialité et spécifier des expressions régulières correspondant à des schémas de valeur de colonne tout en coïncidant éventuellement avec le nom de colonne.

En créant et en utilisant des instances de classification personnalisée, vous pouvez :

  • Accélérer vos efforts de classification des données.

  • Définir des balises spécifiques à l’industrie et au domaine pour les colonnes contenant des données sensibles.

  • Tirer parti de Snowflake pour mieux contrôler vos efforts de suivi des données PII.

À propos de l’algorithme de classification personnalisée

Snowflake utilise un algorithme unique pour la classification personnalisée par rapport à l’algorithme de la Classification des données. S’il existe différents algorithmes de classification, c’est pour garantir des résultats stables en fonction de la manière dont vous choisissez de classer vos données.

L’algorithme de classification personnalisée utilise une règle de notation pour déterminer quelle balise système de catégorie sémantique recommander et quelles balises de catégorie sémantique, le cas échéant, suggérer comme alternatives. La logique de notation évalue les expressions régulières que vous ajoutez à votre instance, que vous spécifiez en appelant la méthode custom_classifier !ADD_REGEX sur votre instance.

La règle de notation utilise une valeur seuil par défaut qui équivaut à un niveau de confiance élevé en ce qui concerne la balise recommandée. L’algorithme compare le score d’une colonne à la valeur seuil et recommande une balise figurant parmi les balises suivantes :

Le tableau suivant résume l’algorithme de notation et la balise recommandée :

Correspondance de noms fournie

La valeur correspond à >= seuil

Le nom correspond

Recommandation

Vrai

Vrai

Vrai

Catégorie personnalisée

Faux

Vrai

Catégorie Snowflake

Vrai

Faux

Catégorie Snowflake

Faux

Faux

Catégorie Snowflake

Faux

Vrai

Non applicable

Catégorie personnalisée

Faux

Non applicable

Catégorie Snowflake

Limitations

Actuellement, vous ne pouvez utiliser que SQL pour exécuter des classificateurs personnalisés ; vous ne pouvez pas utiliser Snowsight pour exécuter des classificateurs personnalisés.

Utilisation de classificateurs personnalisés

La classification personnalisée utilise la classe CUSTOM_CLASSIFIER. Vous pouvez créer une instance de la classe CUSTOM_CLASSIFIER et appeler des méthodes d’instance pour gérer les expressions régulières associées à l’instance. Les méthodes et commandes SQL suivantes sont prises en charge :

En outre, vous pouvez utiliser les rôles suivants avec une classification personnalisée :

  • SNOWFLAKE.CLASSIFICATION_ADMIN : rôle de base de données qui vous permet de créer une instance de classification personnalisée.

  • custom_classifier !PRIVACY_USER : rôle d’instance qui vous permet d’effectuer les actions suivantes :

    • Ajouter une catégorie à l’instance en appelant la méthode ADD_REGEX sur l’instance.

    • Supprimer une catégorie d’une instance en appelant la méthode DELETE_CATEGORY sur l’instance.

  • Le rôle de compte titulaire du privilège OWNERSHIP sur l’instance peut :

    • Supprimer l’instance via une commande DROP CUSTOM_CLASSIFIER.

    • Répertorier des instances via une commande SHOW CUSTOM_CLASSIFIER.

Vous pouvez accorder les rôles d’instance à des rôles de compte et à des rôles de base de données pour permettre à d’autres utilisateurs d’utiliser des instances de classification personnalisée. Par exemple :

GRANT SNOWFLAKE.DATA_PRIVACY.CUSTOM_CLASSIFIER ROLE <name>!USER
  TO ROLE <role_name>

REVOKE SNOWFLAKE.DATA_PRIVACY.CUSTOM_CLASSIFIER ROLE <name>!USER
  FROM ROLE <role_name>

GRANT SNOWFLAKE.DATA_PRIVACY.CUSTOM_CLASSIFIER ROLE <name>!USER
  TO DATABASE ROLE <database_role_name>

REVOKE SNOWFLAKE.DATA_PRIVACY.CUSTOM_CLASSIFIER ROLE <name>!USER
  FROM DATABASE ROLE <database_role_name>
Copy

Où :

name

Spécifie le nom de l’instance de classification personnalisée que vous créez.

role_name

Spécifie le nom d’un rôle de compte.

database_role_name

Spécifie le nom d’un rôle de base de données.

Comme pour les autres objets Snowflake, le rôle qui crée l’instance de classification personnalisée se voit automatiquement accorder le privilège OWNERSHIP sur l’instance.

L’approche de haut niveau pour classer les données à l’aide de classificateurs personnalisés est la suivante :

  1. Identifiez une table à classer.

  2. Utilisez SQL pour effectuer les opérations suivantes :

    1. Créer une instance de classification personnalisée.

    2. Ajouter les catégories de balises système et les expressions régulières à l’instance.

    3. Classer la table.

Exemple

Procédez comme suit pour créer un classificateur personnalisé afin de classer une table :

  1. Prenons une table, data.tables.patient_diagnosis, dont l’une des colonnes contient des codes de diagnostic tels que des codes ICD-10.

    +-------------+----------------------------------------------------------+
    | ICD_10_CODE | DESCRIPTION                                              |
    +-------------+----------------------------------------------------------+
    | G30.9       | Alzheimer's disease, unspecified                         |
    | G80.8       | Other cerebral palsy                                     |
    | S13.4XXA    | Sprain of ligaments of cervical spine, initial encounter |
    +-------------+----------------------------------------------------------+
    
    Copy

    Cette table peut également comprendre des colonnes permettant d’identifier les patients qui ont été traités dans un établissement médical, comme le prénom et le nom, les identificateurs uniques de l’assurance maladie et la date de naissance. Le propriétaire de données peut classer la table pour s’assurer que les colonnes sont correctement balisées afin que la table puisse être surveillée.

    Dans cet exemple, le propriétaire de données dispose déjà de ces privilèges dans le cadre de son rôle :

    • OWNERSHIP sur la table à classer.

    • OWNERSHIP sur le schéma contenant la table.

    • USAGE sur la base de données contenant le schéma et la table.

  2. Autorisez le propriétaire de données à classer la table en accordant le rôle de base de données SNOWFLAKE.CLASSIFICATION_ADMIN au rôle de propriétaire de données :

    USE ROLE ACCOUNTADMIN;
    GRANT DATABASE ROLE SNOWFLAKE.CLASSIFICATION_ADMIN
      TO ROLE data_owner;
    
    Copy
  3. En tant que propriétaire de données, créez un schéma pour stocker vos instances de classification personnalisée :

    USE ROLE data_owner;
    CREATE SCHEMA data.classifiers;
    
    Copy
  4. Utilisez la commande CREATE CUSTOM_CLASSIFIER pour créer une instance de classification personnalisée dans le schéma data.classifiers :

    USE SCHEMA data.classifiers;
    CREATE OR REPLACE SNOWFLAKE.DATA_PRIVACY.CUSTOM_CLASSIFIER medical_codes();
    
    Copy

    Mettez à jour votre chemin de recherche pour faciliter l’utilisation de l’instance.

  5. Utilisez une commande SHOW CUSTOM_CLASSIFIER pour répertorier chaque instance que vous créez. Par exemple :

    SHOW SNOWFLAKE.DATA_PRIVACY.CUSTOM_CLASSIFIER;
    
    Copy

    Renvoie :

    +----------------------------------+---------------+---------------+-------------+-----------------+---------+-------------+
    | created_on                       | name          | database_name | schema_name | current_version | comment | owner       |
    +----------------------------------+---------------+---------------+-------------+-----------------+---------+-------------+
    | 2023-09-08 07:00:00.123000+00:00 | MEDICAL_CODES | DATA          | CLASSIFIERS | 1.0             | None    | DATA_OWNER  |
    +----------------------------------+---------------+---------------+-------------+-----------------+---------+-------------+
    
  6. Appelez la méthode custom_classifier !ADD_REGEX sur l’instance pour spécifier les balises système et l’expression régulière permettant d’identifier les codes ICD-10 dans une colonne. L’expression régulière de cet exemple correspond à tous les codes ICD-10 possibles. L’expression régulière correspondant au nom de colonne, ICD*, et le commentaire sont facultatifs :

    CALL medical_codes!ADD_REGEX(
      'ICD_10_CODES',
      'IDENTIFIER',
      '[A-TV-Z][0-9][0-9AB]\.?[0-9A-TV-Z]{0,4}',
      'ICD*',
      'Add a regex to identify ICD-10 medical codes in a column'
    );
    
    Copy

    Renvoie :

    +---------------+
    |   ADD_REGEX   |
    +---------------+
    | ICD_10_CODES  |
    +---------------+
    

    Astuce

    Testez l’expression régulière avant d’ajouter une expression régulière à l’instance de classification personnalisée. Par exemple :

    SELECT icd_10_code
    FROM medical_codes
    WHERE icd_10_code REGEXP('[A-TV-Z][0-9][0-9AB]\.?[0-9A-TV-Z]{0,4}');
    
    Copy
    +-------------+
    | ICD-10-CODE |
    +-------------+
    | G30.9       |
    | G80.8       |
    | S13.4XXA    |
    +-------------+
    

    Dans cette requête, seules les valeurs valides correspondant à l’expression régulière sont renvoyées. La requête ne renvoie pas de valeurs non valides telles que xyz.

    Pour plus de détails, voir Fonctions de chaîne (expressions régulières).

  7. Appelez la méthode custom_classifier !LIST sur l’instance pour vérifier l’expression régulière que vous avez ajoutée à l’instance :

    SELECT medical_codes!LIST();
    
    Copy

    Renvoie :

    +--------------------------------------------------------------------------------+
    | MEDICAL_CODES!LIST()                                                           |
    +--------------------------------------------------------------------------------+
    | {                                                                              |
    |   "ICD-10-CODES": {                                                            |
    |     "col_name_regex": "ICD*",                                                  |
    |     "description": "Add a regex to identify ICD-10 medical codes in a column", |
    |     "privacy_category": "IDENTIFIER",                                          |
    |     "value_regex": "[A-TV-Z][0-9][0-9AB]\.?[0-9A-TV-Z]{0,4}"                   |
    | }                                                                              |
    +--------------------------------------------------------------------------------+
    

    Pour supprimer une catégorie, appelez la méthode custom_classifier !DELETE_CATEGORY sur l’instance.

  8. Utilisez SQL pour classer la table. Pour plus de détails, voir Utilisation de SQL pour classer les tables d’un schéma.

  9. Si l’instance n’est plus nécessaire, utilisez la commande DROP CUSTOM_CLASSIFIER pour supprimer une instance de classification personnalisée du système :

    DROP SNOWFLAKE.DATA_PRIVACY.CUSTOM_CLASSIFIER data.classifiers.medical_codes;
    
    Copy