Utilisation des domaines de confidentialité en tant qu’administrateur

Un domaine de confidentialité définit les valeurs possibles dans une colonne, de manière similaire à un domaine mathématique. Snowflake utilise un domaine de confidentialité pour déterminer la quantité de bruit à introduire dans les résultats.

Pour obtenir une compréhension complète des domaines de confidentialité avant d’effectuer les tâches de cette section, voir À propos des domaines de confidentialité.

Il est recommandé, pour un fournisseur de données, de définir un domaine de confidentialité pour toutes les colonnes numériques et catégorielles sur lesquelles un analyste pourrait vouloir agir avant de leur distribuer des données.

Choisir un domaine de confidentialité

Un domaine de confidentialité définit des valeurs possibles dans une colonne, pas nécessairement des valeurs réelles. Vous pouvez restreindre ou étendre un domaine de confidentialité selon vos besoins afin qu’il ne contienne pas de valeurs réelles. Par exemple, vous pouvez effectuer l’une des opérations suivantes :

  • Définissez une liste plus large pour masquer les valeurs exactes. Étant donné qu’un analyste peut visualiser le domaine de confidentialité, vous ne souhaiterez peut-être pas exposer le contenu exact d’une colonne. Par exemple, supposons qu’une colonne contienne un sous-ensemble de codes postaux. Vous souhaiterez peut-être étendre le domaine de confidentialité pour inclure tous les codes postaux possibles, masquant ainsi si un code postal particulier est présent dans l’ensemble de données.

  • Définissez une plage plus étroite pour masquer la présence d’une valeur aberrante. Par exemple, si la plupart des valeurs sont comprises entre 1 et 50, vous ne souhaiterez peut-être pas qu’une valeur de 100 soit incluse dans une moyenne, car l’analyste pourrait déduire la présence de 100 parce que la moyenne est inhabituellement élevée.

Pour plus d’informations sur la manière dont les valeurs en dehors d’un domaine de confidentialité sont traitées, voir Valeurs en dehors d’un domaine de confidentialité.

Important

Toute personne disposant de privilèges permettant d’interroger une table protégée par la confidentialité a la possibilité d’afficher le domaine de confidentialité d’une colonne de cette table. Choisissez donc soigneusement vos domaines de confidentialité.

Bien que la plupart des champs doivent avoir un domaine de confidentialité, il existe des exceptions importantes. Par exemple, les champs d’identificateurs uniques tels que l’utilisateur ID, les e-mails, les numéros de carte de crédit et les numéros de sécurité sociale ne devraient pas avoir de domaine de confidentialité. Les utilisateurs peuvent voir le domaine de confidentialité exact, et vous ne souhaitez généralement pas qu’un analyste sache si un identificateur particulier existe dans l’ensemble de données.

En revanche, les domaines de confidentialité doivent contenir les valeurs réelles des champs d’identificateur lorsqu’ils ne sont pas propres à une entité individuelle et dont les valeurs possibles sont connues publiquement, comme les codes postaux, les codes ICD dans les données de santé et les codes NAICS.

Définition d’un domaine de confidentialité

Vous définissez un domaine de confidentialité soit comme une plage de valeurs avec un minimum et un maximum, soit comme une liste de valeurs. En général, le type de domaine de confidentialité est basé sur le type de données de la colonne. Vous ne pouvez pas définir un domaine de confidentialité sur une colonne si son type de données ne figure pas dans la liste suivante.

Type de données

Type de domaine de confidentialité

Numérique

Date et heure

Plage

Chaînes

Liste

Pour définir, modifier ou supprimer un domaine de confidentialité, vous avez besoin du privilège OWNERSHIP sur une table. Vous pouvez définir un domaine de confidentialité en procédant comme suit :

Pour chacune de ces méthodes, la syntaxe du nouveau domaine de confidentialité est la même.

Note

Lorsqu’une table est supprimée, ses domaines de confidentialité sont également supprimés. Ceci s’applique également à une commande CREATE OR REPLACE.

Syntaxe du domaine de confidentialité

La syntaxe de création d’un domaine de confidentialité est :

PRIVACY DOMAIN
  {
      [ BETWEEN ( <lo_value>, <hi_value> ) ]
    | [ IN ( '<value1>, '<value2>', ... ) ]
    | [ REFERENCES <table_name>( <col_name> ) ]
  }
Copy

Paramètres

Un seul paramètre doit être spécifié.

BETWEEN ( lo_value, hi_value )

Crée un domaine de confidentialité qui correspond à la plage de valeurs possibles dans la colonne, où lo_value est la valeur minimale et hi_value est la valeur maximale.

IN ( 'value1', 'value2', ... )

Crée un domaine de confidentialité qui est une liste des valeurs spécifiées.

Le paramètre IN accepte un maximum de 50 valeurs, chacune pouvant contenir un maximum de 100 caractères. Si vous devez spécifier une liste de plus de 50 valeurs, utilisez le paramètre REFERENCES.

REFERENCES table_name( col_name )

Crée un domaine de confidentialité qui est une liste composée des valeurs contenues dans la colonne d’une table.

L’utilisateur qui effectue des requêtes différentiellement privées sur une table avec un domaine de confidentialité REFERENCES doit avoir des privilèges SELECT sur la table qui contient la colonne référencée dans le domaine de confidentialité. Cela signifie que si vous partagez une table protégée par la confidentialité qui fait référence à une autre, il est préférable de partager la table référencée dans le même partage.

Le domaine de confidentialité peut se référencer lui-même ; cependant, vous devez être prudent lorsque vous utilisez cette capacité. Si le domaine de confidentialité fait référence à sa propre colonne, la liste contient toutes les valeurs réelles de la colonne, et non toutes les valeurs possibles de la colonne, ce qui peut exposer des informations privées. Par exemple, si le domaine de confidentialité d’une colonne zipcode se référence lui-même, l’analyste saura alors avec une certitude absolue si un code postal particulier se trouve dans l’ensemble de données lorsqu’il consultera le domaine de confidentialité.

Note

Vous ne pouvez pas définir un domaine de confidentialité qui se référence lui-même lors de la création de la table pour la première fois. Créez d’abord la table, puis définissez le domaine de confidentialité avec une commande distincte.

La colonne référencée peut contenir 16 384 valeurs uniques.

Définir un domaine de confidentialité lors de la création d’une nouvelle table

La syntaxe pour définir un domaine de confidentialité pour une colonne lors de l’utilisation de la commande CREATE TABLE pour créer une table est :

CREATE TABLE <table_name>
  ( <col_name> <col_type> PRIVACY DOMAIN
    {
        [ BETWEEN ( <lo_value>, <hi_value> ) ]
      | [ IN ( '<value1>', '<value2>', ... ) ]
      | [ REFERENCES <table_name>( <col_name> ) ]
    }
  )
Copy

Pour plus d’informations, voir Syntaxe du domaine de confidentialité.

Définir un domaine de confidentialité lors de l’ajout d’une nouvelle colonne

La syntaxe pour définir un domaine de confidentialité lors de l’utilisation de la commande ALTER TABLE pour ajouter une nouvelle colonne à une table existante est :

ALTER TABLE <table_name>
  ADD COLUMN <col_name> <col_type> PRIVACY DOMAIN
    {
        [ BETWEEN ( <lo_value>, <hi_value> ) ]
      | [ IN ( '<value1>', '<value2>', ... ) ]
      | [ REFERENCES <table_name>( <col_name> ) ]
    }
Copy

Pour plus d’informations, voir Syntaxe du domaine de confidentialité.

Définir un domaine de confidentialité en modifiant une colonne

La syntaxe pour définir un domaine de confidentialité pour une colonne existante d’une table à l’aide de la commande ALTER TABLE … ALTER COLUMN est :

ALTER TABLE <table_name>
  { ALTER | MODIFY } COLUMN <col1_name> SET PRIVACY DOMAIN
    {
        [ BETWEEN ( <lo_value>, <hi_value> ) ]
      | [ IN ( '<value1>', '<value2>', ... ) ]
      | [ REFERENCES <table_name>( <col_name> ) ]
    }
Copy

Pour plus d’informations, voir Syntaxe du domaine de confidentialité.

Modifier un domaine de confidentialité

La syntaxe de modification d’un domaine de confidentialité existant est identique à la création d’un nouveau domaine de confidentialité sur une colonne existante. Une instruction ALTER TABLE … La commande ALTER COLUMN … SET PRIVACY DOMAIN remplace l’ancien domaine de confidentialité par le nouveau.

Supprimer un domaine de confidentialité

La syntaxe qui permet d’utiliser la commande ALTER TABLE … ALTER COLUMN pour supprimer un domaine de confidentialité d’une colonne est :

ALTER TABLE <table_name>
  { ALTER | MODIFY } COLUMN <col1_name> UNSET PRIVACY DOMAIN
Copy

Afficher un domaine de confidentialité

Pour afficher les domaines de confidentialité d’une table ou d’une vue protégée par la confidentialité, exécutez la commande DESCRIBE TABLE ou DESCRIBE VIEW. Le domaine de confidentialité d’une colonne apparaît dans la colonne PRIVACY_DOMAIN de la sortie.

Vous avez besoin du privilège SELECT sur une table protégée par la confidentialité pour afficher ses domaines de confidentialité.

Interprétation de l’objet du domaine de confidentialité

Un domaine de confidentialité pour une colonne est renvoyé sous la forme d’un objet JSON. Le champ domain_type de l’objet JSON indique si le domaine de confidentialité est une plage de valeurs ou une liste. Les champs restants dans l’objet dépendent de la valeur du champ domain_type.

L’objet JSON d’un domaine de confidentialité peut inclure les champs suivants :

domain_type

Indique le type de domaine de confidentialité.

BETWEEN

Le domaine de confidentialité est une plage de valeurs possibles qui pourraient être dans la colonne.

IN

Le domaine de confidentialité est une liste de valeurs possibles qui pourraient être dans la colonne.

REFERENCES

Le domaine de confidentialité est une liste de valeurs possibles qui pourraient être dans la colonne. Cette liste provient de la colonne de la même table ou d’une autre table. Pour afficher la liste du domaine de confidentialité, interrogez le contenu de la colonne référencée.

low

Si domain_type = BETWEEN, spécifie la valeur minimale dans la plage de valeurs possibles.

high

Si domain_type = BETWEEN, spécifie la valeur maximale dans la plage de valeurs possibles.

values

Si domain_type = IN, spécifie la liste des valeurs possibles, structurée comme un tableau.

database

Si domain_type = REFERENCES, spécifie la base de données qui contient la colonne à laquelle Snowflake fait référence pour créer la liste des valeurs possibles.

schema

Si domain_type = REFERENCES, spécifie le schéma qui contient la colonne à laquelle Snowflake fait référence pour créer la liste énumérée des valeurs possibles.

table

Si domain_type = REFERENCES, spécifie la table qui contient la colonne à laquelle Snowflake fait référence pour créer la liste des valeurs possibles.

column

Si domain_type = REFERENCES, spécifie la colonne à laquelle Snowflake fait référence pour créer la liste des valeurs possibles. Pour afficher la liste du domaine de confidentialité, interrogez le contenu de cette colonne.