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 |
|
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 |
|
|
|
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);NotaSe 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
UNIONouDISTINCTnã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 delabel_nameno 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_maskexibe 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_nameespecificado 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.
NotaSe 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.
Importantehg_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.
Faça login no console do Data Security Guard. Para mais informações, consulte Acessar a página do Data Security Guard.
Na barra de navegação à esquerda, clique em para acessar a página Data Identification Rule.
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.
Na barra de navegação à esquerda, clique em Data Masking Management para acessar a página Data Masking Management.
Na lista suspensa Masking Scenario, selecione Hologres display masking (hologres_display_desense_code) e clique em Select Database for Masking à direita.
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.
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.
-