Partage via


Clause mask de colonne

S’applique à : coche marquée oui Databricks SQL coche marquée oui Databricks Runtime 12.2 LTS et versions ultérieures coche marquée oui Unity Catalog uniquement

Spécifie une fonction qui est appliquée à une colonne chaque fois que des lignes sont extraites de la table. Toutes les requêtes ultérieures de cette colonne reçoivent le résultat de l’évaluation de cette fonction sur la colonne à la place de la valeur d’origine de la colonne. Cela peut être utile à des fins de contrôle d’accès plus précis, où la fonction peut inspecter l’identité ou l’appartenance à un groupe de l’utilisateur appelant afin de décider s’il convient de modifier la valeur.

Vous pouvez ajouter des masques de colonnes lorsque vous :

Important

Le masque est appliqué dès que chaque ligne est extraite de la source de données. Les expressions, les prédicats ou les classements sont appliqués après le masquage. Par exemple, la jointure entre la colonne masquée par rapport à une autre colonne d’une autre table utilise les valeurs masquées pour la comparaison de jointure.

Pour plus d’informations sur l’utilisation des masques de colonne, consultez Filtrer les données de table sensibles à l’aide de filtres de lignes et de masques de colonne.

Syntaxe

MASK func_name [ USING COLUMNS ( other_column_name | constant_literal [, ...] ) ]

Paramètres

  • func_name

    Un UDF SQL scalaire avec au moins un paramètre.

    Le premier paramètre de l'UDF SQL mappe 1:1 avec la colonne masquée. Le type de la colonne masquée doit pouvoir être converti en type de paramètre SQL UDF. Si func_name nécessite plus de paramètres, les arguments doivent être fournis par la clause USING COLUMNS.

    Le type de retour de la fonction doit pouvoir être converti en type de données de la colonne masquée.

  • other_column_name

    Spécifie éventuellement des colonnes supplémentaires de la table des colonnes masquées à transmettre func_name. Chacun other_column_name doit pouvoir être converti en paramètre correspondant de func_name.

    Utilisez un masque de colonne pour anonymiser de manière sélective la valeur de column_identifier en fonction de l’utilisateur exécutant une requête sur table_name, de la valeur de column_identifier et du other_column facultatif.

  • constant_literal

    Spécifie un paramètre constant avec le type correspondant à un paramètre de fonction. Les types suivants sont pris en charge : STRING, numérique (INTEGER, FLOAT, DOUBLE, DECIMAL …), BOOLEAN, INTERVAL, NULL.

Exemples

Vous trouverez d’autres exemples dans Filtrer les données de table sensibles à l’aide de filtres de lignes et de masques de colonne.

-- Create a table with a masked column
> CREATE FUNCTION mask_ssn(ssn STRING) RETURN CASE WHEN is_member('HumanResourceDept') THEN ssn ELSE '***-**-****' END;
> CREATE TABLE persons(name STRING, ssn STRING MASK mask_ssn);
> INSERT INTO persons VALUES('James', '123-45-6789';

-- As a non-member of 'HumanResourceDept'
> SELECT * FROM persons;
  James  ***-**-****

-- As a member of 'HumanResourceDept'
> SELECT * FROM persons;
  James  123-45-6789

-- Create a masking function with multiple parameters. When applied first parameter will be the column that masking function applies to
> CREATE FUNCTION mask_pii_regional(value STRING, region STRING)
  RETURN IF(is_account_group_member(region || '_HumanResourceDept'), value, 'REDACTED');

-- Create a table with a masked column. Masking function first parameter will be the column that is masked.
-- The rest of the parameters should be specified in `USING COLUMNS (<columnList>)` clause
> CREATE TABLE persons(name STRING, address STRING MASK mask_pii_regional USING COLUMNS (region), region STRING);
> INSERT INTO persons('James', '160 Spear St, San Francisco', 'US')

-- As a non-member of 'US_HumanResourceDept'
> SELECT * FROM persons;
  James | REDACTED | US

-- As a member of 'US_HumanResourceDept'
> SELECT * FROM persons;
  James | 160 Spear St, San Francisco | US