Crea una política de enmascaramiento, que permite transformar o enmascarar dinámicamente los valores de las columnas para usuarios o roles específicos cuando consultan una tabla.
Sintaxis:
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]Cláusula UPDATE
La cláusula UPDATE especifica qué columnas se deben enmascarar y cómo transformarlas. Se pueden enmascarar varias columnas en una sola política.
Ejemplos:
- Enmascaramiento simple:
UPDATE email = '***masked***' - Enmascaramiento parcial:
UPDATE email = concat(substring(email, 1, 3), '***@***.***') - Enmascaramiento basado en hash:
UPDATE email = concat('masked_', substring(hex(cityHash64(email)), 1, 8)) - Varias columnas:
UPDATE email = '***@***.***', phone = '***-***-****'
Cláusula WHERE
La cláusula WHERE opcional permite aplicar enmascaramiento condicional en función de los valores de las filas. El enmascaramiento solo se aplicará a las filas que cumplan la condición.
Ejemplo:
CREATE MASKING POLICY mask_high_salaries ON employees
UPDATE salary = 0
WHERE salary > 100000
TO analyst;Cláusula TO
En la sección TO, especifique a qué usuarios y roles debe aplicarse la política.
TO user1, user2: Se aplica a usuarios/roles específicosTO ALL: Se aplica a todos los usuariosTO ALL EXCEPT user1, user2: Se aplica a todos los usuarios excepto a los especificados
Cláusula PRIORITY
Cuando varias políticas de enmascaramiento se aplican a la misma columna para un usuario, la cláusula PRIORITY determina el orden de aplicación. Las políticas se aplican por orden de prioridad, de mayor a menor.
La prioridad predeterminada es 0. Las políticas con la misma prioridad se aplican en un orden indefinido.
Ejemplo:
-- 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