Todos os produtos
Search
Central de documentação

Hologres:Data masking

Última atualização: Sep 18, 2026

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

Contexto

A adoção generalizada de tecnologias de big data, como cloud e IA, está extraindo um valor sem precedentes dos dados. No entanto, isso também cria desafios significativos na proteção de informações sensíveis e privadas.

O mascaramento de dados do Hologres permite que você defina regras nos níveis de usuário e coluna. No momento da consulta, os dados são mascarados de acordo com essas regras, evitando a exposição não autorizada de informações sensíveis. Isso permite 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 seu comportamento de mascaramento de dados a partir da V3.1. A tabela a seguir compara os recursos da V3.1 e posteriores com as 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 é definida para usar um valor padrão. Para mais informações, consulte Default values.

Não suportado. Você pode contornar isso usando CAST TEXT. (Não recomendado)

Visualização

Os resultados são mascarados.

Os resultados não são mascarados. (Não recomendado)

Cláusulas JOIN ou WHERE com colunas mascaradas

O resultado é vazio.

Os resultados não são mascarados. (Não recomendado)

Consumo de logs binários do Flink para colunas mascaradas

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

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

  • Nas versões anteriores à V2.2.38 e nas versões da V3.0.1 à 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 da V3.0.19 à V3.0.27:

    Tanto os modos Fixed FE quanto FE proíbem o consumo de logs binários. Para consumir logs binários, você deve desativar 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, você pode consumir logs binários nos modos Fixed FE e FE se não tiver aplicado regras de mascaramento aos resultados da tabela, mesmo que os parâmetros GUC relacionados ao mascaramento de dados estejam ativados.

Leituras diretas de colunas mascaradas do MaxCompute

Proíbe o MaxCompute de ler diretamente colunas mascaradas do Hologres.

A leitura é suportada. (Não recomendado)

Verificar a versão do mascaramento de dados

SELECT hologres.get_hg_anon_version();

Pré-requisitos

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

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

Após executar essas instruções, o comportamento do mascaramento de dados é determinado pela versão da sua instância do Hologres. Selecione também manualmente um comportamento específico com base nas suas necessidades de negócios:

  • Se o comportamento de mascaramento de dados na V3.1 ou posterior não atender às suas expectativas, você pode reverter para o comportamento da V3.0 execute 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 a V3.1 e posteriores será ativado.

    • Se a instrução falhar na execução 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 de dados não são os esperados, e o comportamento de mascaramento de dados precisa ser corrigido.

Limitações

  • Você não pode importar dados de uma tabela com regras de mascaramento para uma tabela sem regras de mascaramento definidas. O sistema retorna o seguinte erro:

    ERROR: The insert table has not set SECURITY LABEL
  • Você não pode execute consultas UNION ou DISTINCT 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 de acordo com o método de mascaramento e o volume de dados. O desempenho pode cair de 10% a 20%, e em uma margem maior em casos extremos.

  • Você não pode defina regras de mascaramento para tabelas externas.

Usar o mascaramento de dados

Configure regras de mascaramento

O Hologres permite que você defina regras de mascaramento de dados para colunas ou usuários específicos. Antes de configurar as regras de mascaramento, configure o parâmetro GUC de mascaramento de dados e ative o recurso. Para mais informações, consulte Prerequisites.

  • Sintaxe

    • Defina uma política de mascaramento para uma coluna

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

      SECURITY LABEL FOR hg_anon ON COLUMN <tablename>.<col_name> IS <label_name>/'default_value';
    • Defina 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 o provedor na instrução SECURITY LABEL.

    tablename

    O nome da tabela que contém a coluna a ser mascarada.

    col_name

    O nome da coluna a ser mascarada.

    label_name

    Para as funções de anonimização predefinidas pelo sistema, você pode usar SHOW hg_anon_labels; para visualizar o label_name definido no banco de dados atual.

    user_name

    O ID da conta. Você pode encontrá-lo 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 dados

    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

    Padrão

    default_value

    default_value

    Mascara dados com um valor padrão.

    Nota
    • Se o label_name especificado não existir quando você configure o mascaramento de dados, o sistema usará o mascaramento de 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

Visualize regras de mascaramento

  • visualize as regras de mascaramento definidas para colunas executando:

    --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;
  • visualize as regras de mascaramento definidas para usuários executando:

    --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 seus 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 execute o comando ALTER DATABASE, a conexão atual se torna inválida. Você deve estabelecer uma nova conexão. Você pode usar 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 de 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 fim de uma string.

    N/A

Exemplos

Dados de amostra

Prepare uma fonte de dados. Você também pode usar seus próprios dados de negócios.

--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');

Defina 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 e visualize os resultados mascarados.

SELECT * FROM personal_basic_information;

O seguinte 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 e visualize o resultado após remover as regras de mascaramento das colunas.

SELECT name,id FROM personal_basic_information;

O seguinte 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 e visualize o resultado após remover a regra de mascaramento do usuário.

SELECT * FROM personal_basic_information;

O seguinte 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)

Defina 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;

O seguinte 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, você também pode usar o Data Security Guard para automatizar o mascaramento de dados.

  • 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 Troubleshooting upgrade preparation errors ou entre no grupo do DingTalk do Hologres para obter suporte. Para mais informações, consulte How do I get more online support?.

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

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

    • Você pode usar o Data Security Guard para mascarar dados no Hologres nas seguintes regiões: China (Beijing), China (Zhangjiakou), China (Shanghai), China (Hangzhou), China (Shenzhen), China (Hong Kong), Singapore, Germany (Frankfurt), Malaysia (Kuala Lumpur), Indonesia (Jakarta) e US (Silicon Valley).

  • Procedimento

    • ative o recurso de mascaramento de dados.

      O mascaramento de dados é desativado por padrão. Um superusuário deve execute os seguintes comandos no banco de dados de destino 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 GUC. Após execute o comando ALTER DATABASE, a alteração não entra em vigor para a conexão atual.

      • Você pode 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 o mascaramento.

      1. Faça login no console do Data Security Guard. Para mais informações, consulte Go to the Data Security Guard page.

      2. Na barra de navegação à esquerda, clique em Rule Configurations > Data Identification Rule e acesse 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 Data identification rules.

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

      5. Na lista suspensa Masking Scenario, selecione Hologres display masking (hologres_display_desense_code) e, em seguida, 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, em seguida, clique em OK.

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

Perguntas frequentes

Os dados não estão mascarados?

  • Sintoma: Você segue as etapas do exemplo, mas os resultados da consulta não são mascarados.

  • Possíveis causas:

    • Uma regra está definida para desativar o mascaramento para alguns usuários.

    • Os rótulos de mascaramento não estão configurados.

  • Solução:

    • execute o seguinte comando SQL para verificar se há regras de remoção de mascaramento específicas 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, o que significa que o mascaramento de dados se aplica a todos os usuários. Se o resultado não estiver vazio, você deve ativar 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 Predefined label_name values.