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.
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écifiquesTO ALL: s'applique à tous les utilisateursTO ALL EXCEPT user1, user2: s'applique à tous les utilisateurs sauf ceux spécifiés
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