Skip to content
ClickHouse Docs
ClickHouse DocsClickHouse Docs

CREATE MASKING POLICY

Somente no ClickHouse Cloud

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íficos
  • TO ALL: Aplica-se a todos os usuários
  • TO 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
Navigation