Cria uma política de mascaramento, que permite transformar ou mascarar dinamicamente valores de coluna para usuários ou funções específicas quando consultam uma tabela.
Sintaxe:
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
A cláusula UPDATE especifica quais colunas devem ser mascaradas e como transformá-las. É possível mascarar várias colunas em uma única política.
Exemplos:
- Mascaramento simples:
UPDATE email = '***masked***' - Mascaramento parcial:
UPDATE email = concat(substring(email, 1, 3), '***@***.***') - Mascaramento baseado em hash:
UPDATE email = concat('masked_', substring(hex(cityHash64(email)), 1, 8)) - Várias colunas:
UPDATE email = '***@***.***', phone = '***-***-****'
Cláusula WHERE
A cláusula WHERE opcional permite o mascaramento condicional com base nos valores das linhas. Apenas as linhas que atenderem à condição terão o mascaramento aplicado.
Exemplo:
CREATE MASKING POLICY mask_high_salaries ON employees
UPDATE salary = 0
WHERE salary > 100000
TO analyst;Cláusula TO
Na seção TO, especifique a quais usuários e funções a política deve se aplicar.
TO user1, user2: Aplica-se a usuários/funções específicosTO ALL: Aplica-se a todos os usuáriosTO ALL EXCEPT user1, user2: Aplica-se a todos os usuários, exceto os especificados
Cláusula PRIORITY
Quando várias políticas de mascaramento se aplicam à mesma coluna para um usuário, a cláusula PRIORITY determina a ordem de aplicação. As políticas são aplicadas da prioridade mais alta para a mais baixa.
A prioridade padrão é 0. Políticas com a mesma prioridade são aplicadas em ordem indefinida.
Exemplo:
-- 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