Ative o mascaramento dinâmico de dados no MaxCompute para exibir informações sensíveis aos usuários com os dados-chave ocultados. Esse recurso oculta ou substitui dados sensíveis em tempo real durante o acesso, evitando sua exposição.
Introdução
O MaxCompute oferece mascaramento dinâmico de dados para proteger informações sensíveis, como dados de identificação pessoal (PII), em cenários como desenvolvimento e testes de negócios, compartilhamento de dados e operações e manutenção (O&M). Diferentemente do controle de acesso com permissões no nível de coluna, que exige que os usuários modifiquem suas consultas para excluir colunas inacessíveis, o mascaramento dinâmico funciona automaticamente sem alterar as consultas existentes. Quando um usuário acessa os dados, o sistema aplica automaticamente a política de mascaramento apropriada com base no usuário e em sua função. Isso garante que os dados sejam mascarados durante consultas, downloads, junções e computações de funções definidas pelo usuário (UDF), reduzindo o risco de exposição de dados sensíveis.
As políticas de mascaramento suportam diversos métodos, incluindo mascaramento, hashing, substituição de caracteres, arredondamento e truncamento de data, aplicáveis a vários tipos de dados, como números de identificação, números de cartões bancários, endereços e telefones. O MaxCompute aplica o mascaramento na etapa inicial da recuperação de dados do armazenamento, assegurando alto desempenho e segurança.

Escopo
-
Regiões suportadas
Este recurso está em preview público e disponível apenas nas seguintes regiões: China (Hangzhou), China (Shanghai), China (Beijing), China (Zhangjiakou), China (Ulanqab), China (Shenzhen), China (Chengdu), China (Hong Kong), Japão (Tóquio), Singapura, Malásia (Kuala Lumpur), Indonésia (Jacarta), Alemanha (Frankfurt), EUA (Vale do Silício) e EUA (Virgínia).
-
Versões de driver suportadas
Método de conexão
Versão do driver
Suporte a mascaramento
Java SDK
0.48.0-public ou posterior
Suportado
odpscmd
0.47.1 ou posterior
Suportado
JDBC
3.4.3 ou posterior
Suportado
MaxFrame
Todas as versões
Suportado
PyODPS
Todas as versões
Suportado
Go SDK
Todas as versões
Suportado
-
Tabelas internas e externas
Políticas de mascaramento são suportadas em tabelas internas e externas do MaxCompute.
O mascaramento dinâmico de dados e as permissões no nível de linha são mutuamente exclusivos. Não é possível configurar permissões no nível de linha em uma tabela que já possui uma política de mascaramento, e vice-versa.
Ao aplicar uma política de mascaramento a caracteres chineses, a codificação de caracteres deve ser UTF-8.
-
Visualizações (Views)
Visualizações padrão suportam políticas de mascaramento. As políticas em uma visualização são sincronizadas com as da tabela source. Quando uma política de mascaramento é aplicada ou removida da tabela source, a alteração entra em vigor imediatamente na visualização.
Uma visualização materializada herda as políticas de mascaramento de sua tabela source no momento da criação. Alterações posteriores nas políticas da tabela source não afetam a visualização materializada.
-
Políticas de mascaramento
Se múltiplas políticas de mascaramento se aplicarem ao acesso de um usuário, a política com a maior prioridade será utilizada. Para mais informações, consulte Prioridades predefinidas de políticas de mascaramento.
Funcionamento
O proprietário do projeto ou usuários com a função Super_Administrator ou Admin podem gerenciar políticas de mascaramento. Quando um usuário acessa uma tabela contendo dados sensíveis, o sistema verifica as políticas de mascaramento associadas ao usuário ou às suas funções e retorna dados mascarados ou em texto simples, conforme apropriado.

Comandos
Ativar ou desativar o mascaramento de dados
A propriedade odps.data.masking.policy.enable é uma configuração no nível do projeto que controla o recurso de mascaramento dinâmico de dados. Apenas o proprietário do projeto ou usuários com a função Super_Administrator ou Admin no nível do projeto podem configurar essa propriedade. Para mais informações, consulte Atribuir funções de gerenciamento integradas a usuários.
Após ativar ou desativar o mascaramento de dados, a alteração leva aproximadamente 15 minutos para entrar em vigor devido à latência de atualização do cache.
-
Ative o mascaramento dinâmico de dados para o projeto.
setproject odps.data.masking.policy.enable=true; -
Desative o mascaramento dinâmico de dados para o projeto.
setproject odps.data.masking.policy.enable=false;
Criar e excluir políticas de mascaramento
Um projeto pode ter até 1.000 políticas de mascaramento.
-
Sintaxe
-
Crie uma política de mascaramento.
CREATE DATA MASKING POLICY [IF NOT EXISTS] <policy_name> TO { USER <user_list> | ROLE <role_list> | default } USING <Predefined Masking Policy>; -
Exclua uma política de mascaramento.
DROP DATA MASKING POLICY <policy_name>;
-
-
Parâmetros
Parâmetro
Obrigatório
Descrição
policy_name
Sim
Nome da política de mascaramento. O nome não diferencia maiúsculas de minúsculas e pode conter apenas letras, dígitos e sublinhados (_). Deve começar com uma letra e ter no máximo 128 bytes.
USER | ROLE | default
Sim
Escopo da política. Selecione uma das opções abaixo:
USER: Aplica a política a um ou mais usuários. Em
<user_list>, especifique os nomes dos usuários alvo. Execute o comando list users; no MaxCompute para visualizar as informações dos usuários.ROLE: Aplica a política a uma ou mais funções. Em
<role_list>, especifique os nomes das funções alvo. Execute o comando list roles; no MaxCompute para visualizar as informações das funções.default: Aplica uma política padrão. Se nenhuma política de mascaramento específica corresponder a um usuário ou função ao acessar uma coluna sensível, a política padrão será aplicada.
Predefined Masking Policy
Sim
Política de mascaramento predefinida. Para mais informações, consulte Políticas de mascaramento predefinidas.
-
Exemplos
-
Exemplo 1: Crie uma política de hashing MD5 para os usuários userA, userB e userC.
CREATE data masking policy IF NOT EXISTS masking_test_001 TO USER (userA, userB, userC) USING MASKED_MD5(0); -
Exemplo 2: Crie uma política de hashing MD5 para as funções de desenvolvimento e implantação do projeto.
CREATE data masking policy IF NOT EXISTS masking_test_001 TO ROLE (role_project_deploy, role_project_dev) USING MASKED_MD5(0);
-
Aplicar uma política de mascaramento
-
Sintaxe
--Apply a masking policy to a table column. APPLY DATA MASKING POLICY <policy_name> BIND TO TABLE <table_name> COLUMN <column_name>; --Unbind a masking policy from a table column. APPLY DATA MASKING POLICY <policy_name> UNBIND FROM TABLE <table_name> COLUMN <column_name>; --Unbind all masking policies from a table column. APPLY DATA MASKING POLICY UNBIND ALL FROM TABLE <table_name> COLUMN <column_name>; --Unbind all masking policies from a table. APPLY DATA MASKING POLICY UNBIND ALL FROM TABLE <table_name>; -
Parâmetros
Parâmetro
Obrigatório
Descrição
policy_name
Sim
Nome da política de mascaramento.
table_name
Sim
Nome da tabela que contém dados sensíveis.
column_name
Sim
Nome da coluna que contém dados sensíveis.
Visualizar políticas de mascaramento
-
Sintaxe
--View the details of a masking policy. DESC DATA MASKING POLICY <policy_name>; --View extended table information, including applied masking policies. DESC EXTENDED <table_name>; --Display the names of all masking policies in the current project. LIST DATA MASKING POLICY; --Display the names of masking policies bound to a specific user. LIST DATA MASKING POLICY TO USER <user_name>; --Display the names of masking policies bound to a specific role. LIST DATA MASKING POLICY TO ROLE <role_name>; --Display the names of all masking policies bound to a specific table. LIST DATA MASKING POLICY ON <table_name>; --Display the names of all masking policies bound to a specific column of a table. LIST DATA MASKING POLICY ON <table_name> TO COLUMN <column_name>; -
Parâmetros
Parâmetro
Obrigatório
Descrição
policy_name
Sim
Nome da política de mascaramento.
table_name
Sim
Nome da tabela que contém dados sensíveis.
column_name
Sim
Nome da coluna que contém dados sensíveis.
user_name
Sim
Nome do usuário.
role_name
Sim
Nome da função.
Políticas de mascaramento predefinidas
As políticas de mascaramento predefinidas incluem métodos como mascaramento, hashing, substituição de caracteres e arredondamento. Selecione a política adequada com base no tipo de dado e nos seus requisitos de proteção.
Categoria | Política | Sintaxe | Descrição |
Geral | Sem mascaramento | UNMASKED | Retorna dados em texto simples. Tipos de dados suportados: Todos. |
Nulificar | MASKED_NULLIFY | Substitui os dados por NULL.
| |
Valor padrão | MASKED_DV | Substitui o valor pelo valor padrão do tipo de dado correspondente. Para mais informações, consulte Valores padrão para a política de mascaramento MASKED_DV.
| |
Truncamento de data | MASKED_DATE_YEAR | Retém apenas a parte do ano de um valor de tempo e redefine o mês, dia e hora para o início daquele ano (1º de janeiro, 00:00:00 UTC).
| |
Arredondamento | MASKED_POINT_RESERVE(<num>) | Arredonda um valor para um número especificado de casas decimais.
| |
Mascaramento | Mascarar início e fim | MASKED_STRING_MASKED_BA(<before>, <after>) | Substitui o início e o fim da string por asteriscos (
|
Mascarar meio | MASKED_STRING_UNMASKED_BA(<before>, <after>) | Exibe o início e o fim da string em texto simples e mascara a parte central com asteriscos (
| |
Hashing | Hashing SHA256 | MASKED_SHA256(<salt>) | Mascara dados usando o algoritmo de hashing SHA256.
|
Hashing SHA512 | MASKED_SHA512(<salt>) | Mascara dados usando o algoritmo de hashing SHA512.
| |
Hashing MD5 | MASKED_MD5(<salt>) | Mascara dados usando o algoritmo de hashing MD5.
| |
Hashing SM3 | MASKED_SM3(<salt>) | Mascara dados usando o algoritmo de hashing SM3.
| |
Substituição de caracteres | Substituição aleatória | MASKED_REPLACE_RANDOM(<position>) | Substitui dados por caracteres aleatórios compostos por dígitos e letras. O comprimento da string permanece inalterado.
|
Substituição aleatória no início e fim | MASKED_REPLACE_RANDOM_BA(<before>, <after>) | Substitui o início e o fim de uma string por caracteres alfanuméricos aleatórios. O comprimento da string permanece inalterado.
| |
Substituição fixa | MASKED_REPLACE_FIXED(<position>, <fixed_string>) |
|
Exemplos de uso
Mascarar informações pessoais sensíveis
Este exemplo demonstra como configurar políticas de mascaramento para ocultar informações pessoais sensíveis.
-
Prepare os dados.
Crie uma tabela para armazenar informações pessoais e insira dados sensíveis.
-- Create a table for sensitive information. CREATE TABLE if NOT EXISTS personal_info ( id bigint COMMENT 'The unique ID of the user.', name string COMMENT 'The name of the user.', age int COMMENT 'The age of the user.', gender string COMMENT 'The gender of the user.', height float COMMENT 'The height of the user.', birthday date COMMENT 'The birth date of the user.', phone_number string COMMENT 'The phone number of the user.', email string COMMENT 'The email address of the user.', address string COMMENT 'The address of the user.', salary decimal(18, 2) COMMENT 'The salary of the user.', create_time timestamp COMMENT 'The time when the user information was created.', update_time timestamp COMMENT 'The time when the user information was updated.', is_deleted boolean COMMENT 'Indicates whether the user information is deleted.' ); -- Insert sensitive data. INSERT INTO personal_info VALUES (1, 'Zhang San', 18, 'Male', 178.56, '1990-01-01', '13800000000', 'zhangsan@example.com', 'Haidian District, Beijing', 5000.00, '2023-04-19 11:32:00', '2023-04-19 11:32:00', false), (2, 'Li Si', 20, 'Female', 162.70, '1992-02-02', '13900000000', 'lisi@example.com', 'Pudong New Area, Shanghai', 6000.00, '2023-04-19 11:32:00', '2023-04-19 11:32:00',false), (3, 'Wang Wu', 22, 'Male', 185.21, '1994-03-03', '14000000000', 'wangwu@example.com', 'Nanshan District, Shenzhen', 7000.00, '2023-04-19 11:32:00', '2023-04-19 11:32:00', false); -
Configure as políticas de mascaramento.
-
Para o nome, mantenha apenas o primeiro caractere e substitua o restante por asteriscos (
*).CREATE data masking policy IF NOT EXISTS masking_name TO USER (RAM$xxx@test.aliyunid.com:xxx) USING MASKED_STRING_UNMASKED_BA(1, 0); apply data masking policy masking_name bind TO TABLE personal_info COLUMN name; -
Arredonde o valor da altura para o inteiro mais próximo.
CREATE data masking policy IF NOT EXISTS masking_height TO USER (RAM$xxx@test.aliyunid.com:xxx) USING MASKED_POINT_RESERVE(0); apply data masking policy masking_height bind TO TABLE personal_info COLUMN height; -
Para a data de nascimento, redefina o valor para o início do ano.
CREATE data masking policy IF NOT EXISTS masking_birthday TO USER (RAM$xxx@test.aliyunid.com:xxx) USING MASKED_DATE_YEAR; apply data masking policy masking_birthday bind TO TABLE personal_info COLUMN birthday; -
Para usuários padrão, aplique hashing aos números de telefone usando o algoritmo SM3.
CREATE DATA MASKING POLICY default_sm3 TO DEFAULT USING MASKED_SM3(0); apply data masking policy default_sm3 bind TO TABLE personal_info COLUMN phone_number;
-
-
Use uma conta com políticas de mascaramento configuradas para consultar os dados.
SELECT id, name, height, birthday, phone_number FROM personal_info; -- Before masking +----+-----------+--------+------------+--------------+ | id | name | height | birthday | phone_number | +----+-----------+--------+------------+--------------+ | 1 | Zhang San | 178.56 | 1990-01-01 | 13800000000 | | 2 | Li Si | 162.7 | 1992-02-02 | 13900000000 | | 3 | Wang Wu | 185.21 | 1994-03-03 | 14000000000 | +----+-----------+--------+------------+--------------+ -- After masking +----+---------+--------+------------+----------------------------------------------+ | id | name | height | birthday | phone_number | +----+---------+--------+------------+----------------------------------------------+ | 1 | Z******** | 179 | 1990-01-01 | lvYJaH4ElL2ilpQx/8tfMUw7xP22yblIgmfWp0/msUQ= | | 2 | L**** | 163 | 1992-01-01 | 9fFWacNSwCRZLAjMHqunlfwkqhTbP2ubuDOeOSh4N1c= | | 3 | W****** | 185 | 1994-01-01 | k/0JoQCSarJg9ATJ5tyVnhQf1jIBxHXRbB+cvUm4OmE= | +----+---------+--------+------------+----------------------------------------------+
Mascaramento padrão para todos os usuários e funções
Este exemplo ilustra como a prioridade da política funciona quando um usuário ou função corresponde a múltiplas políticas de mascaramento.
Aplique a política MASKED_SHA256(5) aos usuários padrão.
CREATE DATA MASKING POLICY default_hash_policy
TO DEFAULT
USING MASKED_SHA256(5);
Aplique a política UNMASKED aos usuários específicos A e B.
CREATE DATA MASKING POLICY ab_unmask_policy
TO USER (A, B)
USING UNMASKED;
Resultado: Os usuários A e B podem acessar dados em texto simples. Outros usuários acessam apenas os dados com hashing SHA256.
Os usuários A e B correspondem tanto à política MASKED_SHA256(5) quanto à UNMASKED. O sistema aplica UNMASKED porque ela tem prioridade mais alta. Para mais informações, consulte Prioridades predefinidas de políticas de mascaramento. Outros usuários correspondem apenas à política MASKED_SHA256(5).
Apêndice
Prioridades predefinidas de políticas de mascaramento
Quando múltiplas políticas de mascaramento se aplicam ao acesso de dados de um usuário, aquela com a maior prioridade é utilizada.
Por exemplo, um usuário chamado A acessa a coluna col_string e sua solicitação corresponde a duas políticas de mascaramento: MASKED_REPLACE_RANDOM(3) com nível de prioridade 3 e MASKED_SM3 com nível de prioridade 4. Como um número menor indica maior prioridade, a política MASKED_REPLACE_RANDOM(3) é aplicada. O usuário A vê os dados mascarados com caracteres aleatórios.
Prioridade | Política de mascaramento predefinida |
0 (mais alta) | UNMASKED |
1 | MASKED_POINT_RESERVE(num) |
2 | MASKED_DATE_YEAR |
3 | MASKED_STRING_MASKED_BA(before, after) |
MASKED_STRING_UNMASKED_BA(before, after) | |
MASKED_REPLACE_RANDOM(position) | |
MASKED_REPLACE_RANDOM_BA(before, after) | |
MASKED_REPLACE_FIXED(position, fixed_string) | |
4 | MASKED_SHA256 |
MASKED_SHA512 | |
MASKED_MD5 | |
MASKED_SM3 | |
5 | MASKED_DV |
6 (mais baixa) | MASKED_NULLIFY |
Valores padrão para a política de mascaramento MASKED_DV
|
Tipo |
Padrão |
|
bigint |
0 |
|
double |
0,0 |
|
decimal |
0 |
|
string |
"" (string vazia) |
|
datetime |
DATETIME'1970-01-01 00:00:00' (UTC) |
|
boolean |
false |
|
tinyint |
0 |
|
smallint |
0 |
|
int |
0 |
|
binary |
'' (vazio) |
|
float |
0,0 |
|
varchar(n) |
"" (string vazia) |
|
char(n) |
" " (n espaços) |
|
date |
DATE'1970-01-01' |
|
timestamp |
TIMESTAMP'1970-01-01 00:00:00' (UTC) |
|
timestamp_ntz |
TIMESTAMP'1970-01-01 00:00:00' (UTC) |
|
array |
Array vazio |
|
map |
Map vazio |
|
json |
"" (string vazia) |
|
struct |
Uma struct com valores padrão para cada campo |