- Masking policies (ClickHouse Cloud, 25.12+): Mascaramento dinâmico nativo aplicado no momento da consulta para usuários ou funções específicos
- String replacement functions: Mascaramento básico com funções integradas
- Masked views: Criação de views com lógica de transformação
- Materialized columns: Armazenamento de versões mascaradas junto com os dados originais
- Query masking rules: Mascaramento de dados sensíveis em logs (ClickHouse OSS)
Usar políticas de mascaramento (ClickHouse Cloud)
As políticas de mascaramento estão disponíveis no ClickHouse Cloud a partir da versão 25.12.
CREATE MASKING POLICY oferece uma forma nativa de mascarar dinamicamente valores de colunas para usuários ou papéis específicos durante a consulta. Diferentemente de outras abordagens, as políticas de mascaramento não exigem a criação de views separadas nem o armazenamento de dados mascarados - a transformação ocorre de forma transparente quando os usuários consultam a tabela.
Política de mascaramento básica
orders que contém informações de clientes:
masked_data_viewer:
masked_data_viewer consulta a tabela orders, ele vê automaticamente dados mascarados:
Query
Response (for masked_data_viewer role)
masked_data_viewer veem os dados originais, não mascarados.
Mascaramento condicional
WHERE para aplicar o mascaramento somente a linhas específicas. Por exemplo, para mascarar apenas pedidos de alto valor:
Múltiplas políticas com prioridade
PRIORITY para definir qual transformação será aplicada. Valores de prioridade mais altos são aplicados por último:
total_amount > 100, a política refined_masking (prioridade 10) substitui a política basic_masking (prioridade 0) para a coluna name, enquanto email continua usando o mascaramento básico.
Mascaramento baseado em hash
Gerenciar políticas de mascaramento
Use funções de substituição de strings
replace oferece uma forma prática de mascarar dados:
| Função | Descrição |
|---|---|
replaceOne | Substitui a primeira ocorrência de um padrão em uma string pela string de substituição fornecida. |
replaceAll | Substitui todas as ocorrências de um padrão em uma string pela string de substituição fornecida. |
replaceRegexpOne | Substitui a primeira ocorrência de uma substring que corresponde a um padrão de expressão regular (na sintaxe re2) em uma string pela string de substituição fornecida. |
replaceRegexpAll | Substitui todas as ocorrências de uma substring que corresponde a um padrão de expressão regular (na sintaxe re2) em uma string pela string de substituição fornecida. |
[CUSTOMER_NAME] usando a função replaceOne:
Query
Response
replaceRegexpOne para substituir qualquer nome de cliente:
Query
Response
replaceRegexpAll.
Query
\3 é usado para substituir o terceiro grupo de captura pela string resultante, o que produz:
Response
Criar VIEWs mascaradas
VIEW pode ser usada em conjunto com as funções de string mencionadas anteriormente para aplicar transformações a colunas que contêm dados sensíveis antes de serem apresentados ao usuário.
Dessa forma, os dados originais permanecem inalterados, e os usuários que consultam a view veem apenas os dados mascarados.
Para demonstrar, imagine que temos uma tabela que armazena registros de pedidos de clientes.
Queremos garantir que um grupo de funcionários possa visualizar essas informações, mas não queremos que eles vejam todos os dados dos clientes.
Execute a consulta abaixo para criar uma tabela de exemplo orders e inserir nela alguns registros fictícios de pedidos de clientes:
masked_orders:
SELECT da consulta de criação da view acima, definimos transformações com replaceRegexpOne nos campos name, email, phone e shipping_address, que contêm informações sensíveis e que queremos mascarar parcialmente.
Selecione os dados da view:
Query
Response
SELECT sobre a view ao role:
SELECT na tabela base por meio de nenhuma role.
Assim, por segurança, você deve revogar explicitamente o acesso à tabela base:
masked_orders_viewer possam ver apenas
os dados mascarados da view, e não os dados originais, sem máscara, da tabela.
Use colunas MATERIALIZED e restrições de acesso no nível da coluna
VIEW separada para os dados mascarados, agora vamos criar colunas mascaradas usando MATERIALIZED:
select a seguir, verá que os dados mascarados são ‘materializados’ no momento da inserção e armazenados junto com os dados originais, sem mascaramento.
É necessário selecionar explicitamente as colunas mascaradas, pois o ClickHouse não inclui automaticamente colunas materializadas em consultas SELECT * por padrão.
Query
Response
orders.
Recrie o papel que criamos anteriormente:
SELECT na tabela orders:
orders,
é possível marcar as colunas sensíveis não mascaradas como EPHEMERAL,
o que garante que colunas desse tipo não sejam armazenadas na tabela.
Query
Response
Use regras de mascaramento de consultas para dados de log
system.query_log, system.text_log e system.processes).
Isso ajuda a evitar que dados sensíveis vazem apenas nos logs.
Observe que isso não mascara dados nos resultados da consulta.
Por exemplo, para mascarar um número de seguro social, você pode adicionar a seguinte regra à sua configuração do servidor: