Passer au contenu principal
Crée une politique de masquage, qui permet de transformer ou de masquer dynamiquement les valeurs de colonnes pour des utilisateurs ou des rôles spécifiques lorsqu’ils interrogent une table.
Les politiques de masquage assurent la sécurité des données au niveau des colonnes en transformant les données sensibles au moment de la requête, sans modifier les données stockées.
Syntaxe :
CREATE MASKING POLICY [IF NOT EXISTS | OR REPLACE] policy_name ON [database.]table
    UPDATE column1 = expression1 [, column2 = expression2 ...]
    [WHERE condition]
    TO {role1 [, role2 ...] | ALL | ALL EXCEPT role1 [, role2 ...]}
    [PRIORITY priority_number]

Clause UPDATE

La clause UPDATE précise quelles colonnes masquer et comment les transformer. Vous pouvez masquer plusieurs colonnes dans une même politique. Exemples :
  • Masquage simple : UPDATE email = '***masked***'
  • Masquage partiel : UPDATE email = concat(substring(email, 1, 3), '***@***.***')
  • Masquage fondé sur le hachage : UPDATE email = concat('masked_', substring(hex(cityHash64(email)), 1, 8))
  • Plusieurs colonnes : UPDATE email = '***@***.***', phone = '***-***-****'

Clause WHERE

La clause WHERE facultative permet un masquage conditionnel en fonction des valeurs des lignes. Seules les lignes qui satisfont à la condition seront masquées. Exemple :
CREATE MASKING POLICY mask_high_salaries ON employees
UPDATE salary = 0
WHERE salary > 100000
TO analyst;

Clause TO

Dans la section TO, indiquez à quels utilisateurs et rôles la politique doit s’appliquer.
  • TO user1, user2 : s’applique à des utilisateurs/rôles spécifiques
  • TO ALL : s’applique à tous les utilisateurs
  • TO ALL EXCEPT user1, user2 : s’applique à tous les utilisateurs sauf ceux spécifiés
Contrairement aux politiques de lignes, les politiques de masquage n’affectent pas les utilisateurs auxquels elles ne s’appliquent pas. Si aucune politique de masquage ne s’applique à un utilisateur, il voit les données d’origine.

Clause PRIORITY

Lorsque plusieurs politiques de masquage ciblent la même colonne pour un utilisateur donné, la clause PRIORITY détermine l’ordre dans lequel elles sont appliquées. Les politiques sont appliquées de la priorité la plus élevée à la plus faible. La priorité par défaut est 0. Les politiques ayant la même priorité sont appliquées dans un ordre indéterminé. Exemple :
-- Applied second (lower priority)
CREATE MASKING POLICY mask1 ON users
UPDATE email = 'low@priority.com'
TO analyst
PRIORITY 1;

-- Applied first (higher priority)
CREATE MASKING POLICY mask2 ON users
UPDATE email = 'high@priority.com'
TO analyst
PRIORITY 10;

-- analyst sees 'low@priority.com' because it's applied last
Considérations relatives aux performances
  • Les politiques de masquage peuvent affecter les performances des requêtes selon la complexité des expressions
  • Certaines optimisations peuvent être désactivées pour les tables dotées de politiques de masquage actives
Dernière modification le 29 juin 2026