Todos os produtos
Search
Central de documentação

Hologres:Mascaramento de dados

Última atualização: Jun 28, 2026

O Hologres oferece um recurso de mascaramento de dados para proteger informações sensíveis no nível da coluna. Quando ativado, esse recurso mascara automaticamente os dados sensíveis nos resultados das consultas, aumentando a segurança. Este tópico descreve como ativar o mascaramento de dados e gerenciar as regras correspondentes.

Contexto

A adoção generalizada de tecnologias de big data, como computação em nuvem e IA, gera valor sem precedentes a partir dos dados. No entanto, isso também cria desafios significativos para proteger informações privadas e sensíveis.

O mascaramento de dados do Hologres permite definir regras nos níveis de usuário e coluna. Durante a consulta, o sistema mascara os dados conforme essas regras, evitando a exposição não autorizada de informações sensíveis. Assim, é possível compartilhar e analisar dados com segurança, garantindo que as informações privadas permaneçam não identificáveis.

Comparação de versões

O Hologres otimizou o comportamento de mascaramento de dados a partir da versão V3.1. A tabela a seguir compara os recursos da V3.1 e posteriores com os das versões anteriores.

Recurso

V3.1 e posteriores

V3.0 e anteriores

Mascaramento para tipos de dados não TEXT

Suporta políticas de mascaramento padrão para tipos de dados como INT, FLOAT e arrays. Essas políticas entram em vigor apenas quando a política de mascaramento usa um valor padrão. Para mais informações, consulte Valores padrão.

Não suportado. É possível contornar essa limitação usando CAST TEXT. (Não recomendado)

Visualize

Resultados mascarados.

Resultados não mascarados. (Não recomendado)

Cláusulas JOIN ou WHERE com colunas mascaradas

Resultado vazio.

Resultados não mascarados. (Não recomendado)

Consumo de logs binários pelo Flink para colunas mascaradas

  • Se a tabela consumida estiver mascarada para o usuário, o consumo de log binário será proibido em todos os modos.

  • Se a tabela consumida não estiver mascarada para o usuário, o consumo de log binário será permitido em todos os modos.

  • Em versões anteriores à V2.2.38 e entre V3.0.1 e V3.0.19:

    • O modo Fixed FE não suporta o consumo de colunas mascaradas.

    • O modo FE suporta o consumo de colunas mascaradas.

  • Nas versões entre V3.0.19 e V3.0.27:

    Os modos Fixed FE e FE proíbem o consumo de logs binários. Para consumir logs binários, desative o mascaramento de dados para o usuário em todas as tabelas.

    -- Disable data masking for this user.
    ALTER ROLE "<user>" SET hg_anon_enable = OFF;
    -- Disable data masking for this user in a single database.
    ALTER ROLE "<user>" IN DATABASE <database> SET hg_anon_enable = OFF;
  • A partir da V3.0.28, é possível consumir logs binários nos modos Fixed FE e FE caso nenhuma regra de mascaramento tenha sido aplicada aos resultados da tabela, mesmo com os parâmetros GUC relacionados ao mascaramento de dados ativados.

Leitura direta de colunas mascaradas do MaxCompute

Impede que o MaxCompute leia diretamente colunas mascaradas do Hologres.

Leitura suportada. (Não recomendado)

Verificar versão do mascaramento de dados

SELECT hologres.get_hg_anon_version();

Pré-requisitos

Antes de usar o mascaramento de dados, um superusuário deve executar os seguintes comandos no nível do banco de dados.

--Run as a superuser
CREATE EXTENSION IF NOT EXISTS hg_anon;  
ALTER DATABASE <current_db> SET hg_anon_enable = on;

Após a execução dessas instruções, a versão da instância do Hologres determina o comportamento de mascaramento de dados. Também é possível selecionar manualmente um comportamento específico conforme as necessidades do negócio:

  • Caso o comportamento de mascaramento de dados na V3.1 ou posterior não atenda às expectativas, reverta para o comportamento da V3.0 executando a seguinte instrução:

    CALL hologres.set_hg_anon_version(1);
  • Instâncias da V3.0 e anteriores não suportam o procedimento armazenado set_hg_anon_version. Se você atualizou uma instância com mascaramento de dados existente para a V3.1, execute a seguinte instrução para ativar os novos recursos da V3.1. Caso contrário, o sistema mantém o comportamento legado de mascaramento de dados.

    CALL hologres.set_hg_anon_version(2);
    Nota
    • Se a instrução for executada com sucesso, o comportamento de mascaramento de dados para V3.1 e posteriores será ativado.

    • Se a execução falhar e o log de erros exibir "Error: not safe to upgrade to hg_anon version 2", a ativação do recurso falhou. Isso ocorre porque o mascaramento de dados está configurado para colunas de tipos diferentes de TEXT, VARCHAR ou CHAR no banco de dados atual. Nas versões V3.1 e posteriores, os resultados do mascaramento não seriam os esperados, exigindo correção do comportamento.

Limitações

  • Não é possível importar dados de uma tabela com regras de mascaramento para uma tabela sem regras definidas. O sistema retorna o seguinte erro:

    ERROR: The insert table has not set SECURITY LABEL
  • Consultas UNION ou DISTINCT não podem ser executadas em tabelas com regras de mascaramento. O sistema retorna o seguinte erro:

    ERROR: UNION is not support on security item
  • O mascaramento de dados pode afetar o desempenho da consulta. O impacto varia conforme o método de mascaramento e o volume de dados. O desempenho pode cair entre 10% e 20%, podendo ser ainda menor em casos extremos.

  • Não é possível definir regras de mascaramento para tabelas externas.

Usar mascaramento de dados

Configurar regras de mascaramento

O Hologres permite definir regras de mascaramento de dados para colunas ou usuários específicos. Antes de configurar as regras, ative o parâmetro GUC de mascaramento de dados. Para mais informações, consulte Pré-requisitos.

  • Sintaxe

    • Definir uma política de mascaramento para uma coluna

      Para mascarar dados em várias colunas, execute esta instrução individualmente para cada coluna.

      SECURITY LABEL FOR hg_anon ON COLUMN <tablename>.<col_name> IS <label_name>/'default_value';
    • Definir uma política de mascaramento para um usuário

       SECURITY LABEL FOR hg_anon ON ROLE <user_name> IS '[<label_name>|all]:[masked|unmasked]';
  • Parâmetros

    Parâmetro

    Descrição

    hg_anon

    A extensão hg_anon fornece a funcionalidade de mascaramento de dados. Especifique hg_anon como provedor na instrução SECURITY LABEL.

    tablename

    Nome da tabela que contém a coluna a ser mascarada.

    col_name

    Nome da coluna a ser mascarada.

    label_name

    Para as funções de anonimização predefinidas pelo sistema, use SHOW hg_anon_labels; para visualizar o conjunto de label_name no banco de dados atual.

    user_name

    ID da conta. Encontre-o na página Security Settings.

    masked|unmasked

    • masked: Usa mascaramento de dados.

    • unmasked: Não usa mascaramento de dados.

    A tabela a seguir descreve os valores predefinidos de label_name.

    Tipo de dado

    label_name

    Política de mascaramento

    Tipo de mascaramento

    Descrição

    Exemplo

    TEXT

    name

    name

    mask

    Mascara um nome.

    • Antes do mascaramento: Li Hua; Após o mascaramento: * Hua.

    • Antes do mascaramento: Wang Xiaoqiang; Após o mascaramento: ** Qiang.

    email

    email

    mask

    Mascara um endereço de e-mail.

    Antes do mascaramento: lihuang@alibaba.com; Após o mascaramento: lih***@alibaba.com.

    ip

    ip

    mask

    Mascara um endereço IP.

    Antes do mascaramento: 1.2.3.4; Após o mascaramento: 1...*.

    id

    id

    mask

    Mascara um número de documento de identidade.

    Antes do mascaramento: 110345188812011234; Após o mascaramento: 14.

    phone

    phone

    mask

    Mascara um número de telefone.

    Antes do mascaramento: 13900001234; Após o mascaramento: ***1234.

    bank_id

    bank_id

    mask

    Mascara um número de conta bancária ou cartão de crédito.

    Antes do mascaramento: 2349867902834701928; Após o mascaramento: *1928.

    hash

    md5

    hash

    Mascara dados usando o algoritmo MD5.

    Antes do mascaramento: Wenyi West Road, Hangzhou, Zhejiang; Após o mascaramento: dbf894b409d4a2ef17dfd9c7fdcafcd8.

    first_mask

    first_mask

    mask

    A regra first_mask exibe apenas o primeiro caractere.

    Antes do mascaramento: 123456789; Após o mascaramento: 1****.

    INT, FLOAT e outros tipos numéricos

    Default

    default_value

    default_value

    Mascara dados com um valor padrão.

    Nota
    • Se o label_name especificado não existir durante a configuração do mascaramento de dados, o sistema usará o mascaramento por valor padrão como fallback.

    • Suportado apenas no Hologres V3.1 e posteriores.

    Mapeamentos entre tipos de dados e seus valores mascarados padrão:

    • TEXT/VARCHAR/CHAR: ***

    • BOOLEAN: false

    • INT8/INT4/INT2: 0

    • TIMESTAMPTZ/TIMESTAMP: 2000-01-01 00:00:00

    • FLOAT8/FLOAT4/DECIMAL/NUMERIC: 0,0

    • MONEY: 0

    • DATE: 2000-01-01

    • TIME/TIMETZ: Hora atual

    • UUID: 00000000-0000-0000-0000-000000000000

Visualizar regras de mascaramento

  • Para visualizar as regras de mascaramento definidas para colunas:

    --View the masking rules set for columns
    SELECT c.relname, a.attname, provider, label
    FROM pg_seclabel s
    JOIN pg_class c ON s.objoid = c.oid
    JOIN pg_attribute a ON s.objoid = a.attrelid AND s.objsubid = a.attnum;
  • Para visualizar as regras de mascaramento definidas para usuários:

    --View the masking rules set for users
    SELECT
        usename,
        label
    FROM
        pg_shseclabel s
        INNER JOIN pg_catalog.pg_user u ON s.objoid = u.usesysid;

Personalizar regras de mascaramento

Se as regras de mascaramento de dados existentes não atenderem aos requisitos, crie regras personalizadas modificando o parâmetro GUC hg_anon_lables.

  • Sintaxe

    -- label_name is a custom name, and method specifies a built-in Hologres function.
    ALTER DATABASE <db_name> SET hg_anon_labels = '[   
    {"label": <label_name1>, "method":<method1>},  
    {"label": <label_name2>, "method":<method2>}, 
    ...  ]'; 

    Após a execução do comando ALTER DATABASE, a conexão atual torna-se inválida. Estabeleça uma nova conexão. Use o seguinte comando para verificar se a configuração entrou em vigor.

    SHOW hg_anon_enable;
  • Exemplo

    ALTER DATABASE test_db SET hg_anon_labels = '[
    {"label":"ip", "method":{"desensType":"mask", "type":"ip"}},
    {"label":"email", "method":{"desensType":"mask", "type":"email"}},
    {"label":"name", "method":{"desensType":"mask", "type":"name"}},
    {"label":"first_mask", "method":{"desensType":"mask", "type":"user_define", "before":1, "after":0}},
    {"label":"hash", "method":{"desensType":"hash", "type":"md5", "salt":""}}]';

    Parâmetros:

    Item

    Descrição

    Resultado do exemplo

    {"desensType":"mask", "type":"ip"}

    Mascara um endereço IP.

    192...*

    {"desensType":"mask", "type":"email"}

    Mascara um endereço de e-mail.

    abc***@example.net

    {"desensType":"mask", "type":"name"}

    Mascara um nome.

    *Wu

    {"desensType":"hash", "type":"md5", "salt":""}

    Mascara dados usando uma função hash.

    e086aa137fa19f67d27b39d0eca186103228f322c9c98a125554a24f875f0f7e

    {"label":"first_mask", "method":{"desensType":"mask", "type":"user_define", "before":1, "after":0}}{"label":"last_mask", "method":{"desensType":"mask", "type":"user_define", "before":0, "after":1}}

    Permite padrões de mascaramento personalizados, como manter um número especificado de caracteres no início ou no final de uma string.

    N/A

Exemplos

Dados de amostra

Prepare uma source de dados. Também é possível usar seus próprios dados comerciais.

--Create a database.
CREATE DATABASE hg_anon_demo;
--Create a sample data table.
DROP TABLE IF EXISTS personal_basic_information;
CREATE TABLE personal_basic_information  
(
    name TEXT
    ,email TEXT
    ,ip TEXT
    ,id TEXT 
    ,phone TEXT
    ,bank_id TEXT);
--Insert sample data.
INSERT INTO personal_basic_information(name,email,ip,id,phone,bank_id) VALUES 
('Zhang San','jiaxi***@alibaba-inc.com','127.0.0.1','142732199104050022','18157161223','4514610803067088'),
('Li Si','wb-hy583***@antgroup.com','127.0.0.1','510622198412248000','15757121834','6252470010027800'),
('Li Xiaoyao','wb-hy583***@antgroup.com','172.21.4.234','511025198812271696','18215451832','6252470010027800');

Definir regra de mascaramento de coluna

--Create the hg_anon extension.
CREATE EXTENSION IF NOT EXISTS hg_anon;
--Enable data masking for the hg_anon_demo database.
ALTER DATABASE hg_anon_demo SET hg_anon_enable = on;
--Set the masking rule for each column.
SECURITY LABEL FOR hg_anon ON COLUMN personal_basic_information.name IS 'name';
SECURITY LABEL FOR hg_anon ON COLUMN personal_basic_information.id IS 'id';
SECURITY LABEL FOR hg_anon ON COLUMN personal_basic_information.phone IS 'phone';
SECURITY LABEL FOR hg_anon ON COLUMN personal_basic_information.email IS 'email';
SECURITY LABEL FOR hg_anon ON COLUMN personal_basic_information.bank_id IS 'bank_id';
SECURITY LABEL FOR hg_anon ON COLUMN personal_basic_information.ip IS 'ip';

Em uma nova conexão, execute o seguinte comando para visualizar os resultados mascarados.

SELECT * FROM personal_basic_information;

Resultado retornado:

 name  |         email          |      ip      |         id         |    phone    |     bank_id      
-------+------------------------+--------------+--------------------+-------------+------------------
 * Si  | wb-***@antgroup.com    | 127.*.*.*    | 5****************0 | *********34 | ************7800
 ** Yao| wb-***@antgroup.com    | 172.**.*.*** | 5****************6 | *********32 | ************7800
 * San | jia***@alibaba-inc.com | 127.*.*.*    | 1****************2 | *********23 | ************7088
(3 rows)

Remover mascaramento de coluna

SECURITY LABEL FOR hg_anon ON COLUMN personal_basic_information.name IS null;
SECURITY LABEL FOR hg_anon ON COLUMN personal_basic_information.id IS null;

Execute o seguinte comando para visualizar o resultado após remover as regras de mascaramento das colunas.

SELECT name,id FROM personal_basic_information;

Resultado retornado:

SELECT name,id FROM personal_basic_information;
  name  |         id         
--------+--------------------
 Li Si   | 510622198412248000
 Li Xiaoyao | 511025198812271696
 Zhang San   | 142732199104050022
(3 rows)

Remover mascaramento de usuário

--Cancel all masking rules for the user 'BASIC$test'.
SECURITY LABEL FOR hg_anon ON ROLE "BASIC$test" IS 'all:unmasked';

Execute o seguinte comando para visualizar o resultado após remover a regra de mascaramento do usuário.

SELECT * FROM personal_basic_information;

Resultado retornado:

  name  |          email           |      ip      |         id         |    phone    |     bank_id      
--------+--------------------------+--------------+--------------------+-------------+------------------
 Li Si   | wb-hy583***@antgroup.com | 127.0.0.1    | 510622198412248000 | 15757121834 | 6252470010027800
 Li Xiaoyao | wb-hy583***@antgroup.com | 172.21.4.234 | 511025198812271696 | 18215451832 | 6252470010027800
 Zhang San   | jiaxi***@alibaba-inc.com | 127.0.0.1    | 142732199104050022 | 18157161223 | 4514610803067088
(3 rows)

Definir mascaramento em uma coluna JOIN

--Example of setting masking for a JOIN column
CREATE TABLE tbl1 (
    id text
);
INSERT INTO tbl1
    VALUES ('142732199102290022');
--The id column of the personal_basic_information table is already masked.
SELECT * FROM personal_basic_information a JOIN tbl1 b ON a.id = b.id;

Resultado retornado:

name | email | ip | id | phone | bank_id | id 
------+-------+----+----+-------+---------+----
(0 rows)

Usar o Data Security Guard

Além de configurar manualmente as regras de mascaramento, utilize o Data Security Guard para automatizar o processo.

  • Limitações

    • Apenas o Hologres V1.1 e posteriores suportam o uso do Data Security Guard para mascaramento de dados.

      Nota

      Se a versão da sua instância for anterior à V1.1, consulte Erros de preparação de atualização de solução de problemas ou entre no grupo DingTalk do Hologres para obter suporte. Para mais informações, consulte Como obtenho mais suporte online?.

    • Para permitir a detecção de dados sensíveis, o Data Security Guard não mascara dados da conta root.

    • O Data Security Guard amostra dados diariamente às 09:00:00 (UTC+8) para identificar dados sensíveis e definir regras de mascaramento para as colunas que os contêm.

    • Use o Data Security Guard para mascarar dados no Hologres nas seguintes regiões: China (Pequim), China (Zhangjiakou), China (Xangai), China (Hangzhou), China (Shenzhen), China (Hong Kong), Singapura, Alemanha (Frankfurt), Malásia (Kuala Lumpur), Indonésia (Jacarta) e EUA (Vale do Silício).

  • Procedimento

    • Ative o recurso de mascaramento de dados.

      O mascaramento de dados vem desativado por padrão. Um superusuário deve executar os seguintes comandos no banco de dados alvo para ativá-lo.

      --Install the data masking EXTENSION.
      CREATE EXTENSION IF NOT EXISTS hg_anon;
      --Enable data masking for the specified database. It is disabled by default.
      ALTER DATABASE <db_name> SET hg_anon_enable = on;  

      db_name é o banco de dados para o qual você deseja ativar o mascaramento de dados.

      Importante
      • hg_anon_enable é um parâmetro GUC. Após a execução do comando ALTER DATABASE, a alteração não entra em vigor para a conexão atual.

      • Execute a seguinte instrução SQL para verificar se a configuração entrou em vigor.

        SHOW hg_anon_enable;
    • Configure o banco de dados para mascaramento.

      1. Faça login no console do Data Security Guard. Para mais informações, consulte Acessar a página do Data Security Guard.

      2. Na barra de navegação à esquerda, clique em Rule Configurations > Data Identification Rule para acessar a página Data Identification Rule.

      3. Na página Sensitive Data Identification, crie uma regra de identificação de dados. Para mais informações, consulte Regras de identificação de dados.

      4. Na barra de navegação à esquerda, clique em Data Masking Management para acessar a página Data Masking Management.

      5. Na lista suspensa Masking Scenario, selecione Hologres display masking (hologres_display_desense_code) e clique em Select Database for Masking à direita.

      6. Na caixa de diálogo Authorize Account for Masking, selecione um banco de dados na lista Unmasked Databases e mova-o para a lista Masked Databases. Marque a caixa de seleção I agree to authorize Data Security Guard to mask this database e clique em OK.

      7. Na página Data Masking Management, clique em Create Masking Rule no canto superior direito. Para mais informações, consulte Gerenciamento de Mascaramento de Dados. O sistema então aplica o mascaramento ao banco de dados especificado.

Perguntas frequentes

Dados não mascarados?

  • Sintoma: As etapas do exemplo foram seguidas, mas os resultados da consulta não aparecem mascarados.

  • Possíveis causas:

    • Uma regra desativa o mascaramento para alguns usuários.

    • Rótulos de mascaramento não configurados.

  • Solução:

    • Execute o seguinte comando SQL para verificar se existem regras específicas de remoção de mascaramento para usuários.

      SELECT
        usename,
        label
      FROM pg_shseclabel s
      INNER JOIN pg_catalog.pg_user u on s.objoid = u.usesysid;

      Por padrão, essa consulta retorna um resultado vazio, indicando que o mascaramento de dados se aplica a todos os usuários. Se o resultado não estiver vazio, ative o mascaramento para os usuários listados.

    • Execute a seguinte instrução SQL para verificar os rótulos de mascaramento configurados.

      SHOW hg_anon_labels;

      Se o resultado não incluir rótulos como ip, execute o seguinte comando SQL para defini-los.

      ALTER DATABASE compress_test SET hg_anon_labels = '[
      {"label":"ip", "method":{"desensType":"mask", "type":"ip"}},
      {"label":"email", "method":{"desensType":"mask", "type":"email"}},
      {"label":"name", "method":{"desensType":"mask", "type":"name"}},
      {"label":"id", "method":{"desensType":"mask", "type":"id"}},
      {"label":"phone", "method":{"desensType":"mask", "type":"phone"}},
      {"label":"bank_id", "method":{"desensType":"mask", "type":"bank_id"}},
      {"label":"hash", "method":{"desensType":"hash", "type":"md5", "salt":""}},
      {"label":"first_mask", "method":{"desensType":"mask", "type":"user_define", "before":1, "after":0}}
      ]';

      Para mais informações sobre as regras correspondentes a esses rótulos, consulte Valores predefinidos de label_name.