Mascaramento de dados usando o PostgreSQL Anonymizer
Databases for PostgreSQL O Anonymizer é uma extensão do PostgreSQL projetada para tornar os dados anônimos, mascarando ou substituindo informações comerciais sensíveis e de identificação pessoal em um banco de dados do Databases for PostgreSQL.
A extensão é compatível com as seguintes estratégias de mascaramento, cada uma delas adequada a diferentes casos de uso:
- Mascaramento estático: Remover as PII de acordo com as regras.
- Mascaramento dinâmico: oculte as PII somente para os usuários mascarados.
- Despejos anônimos: Basta exportar os dados mascarados para um arquivo SQL.
- Generalização: Substitui valores específicos por categorias ou intervalos mais amplos e menos precisos.
Mascaramento estático
O mascaramento estático é uma técnica de anonimização de dados que substitui irreversivelmente informações confidenciais por valores gerados sinteticamente, valores que preservam o formato. Esse processo garante a remoção completa e permanente dos dados originais, eliminando assim a a possibilidade de reidentificação ou reconstrução. Para obter mais informações, consulte Mascaramento estático.
Ativação do mascaramento estático
-
Instale a extensão Anonymizer.
CREATE EXTENSION IF NOT EXISTS anon; -
Inicialize o anonimizador.
select public.run_anon_init(); -
Definir regras de mascaramento.
SECURITY LABEL FOR anon ON COLUMN <table_name>.<column_name> IS 'MASKED WITH FUNCTION anon.<masking_function>()'; -
Verifique as regras de mascaramento aplicadas.
SELECT objoid::regclass, provider, label FROM pg_seclabel WHERE provider = 'anon' AND objoid = '<table_name>'::regclass; -
Aplique as regras permanentemente. O comando abaixo substitui permanentemente os dados originais na tabela especificada pelos dados mascarados.
SELECT anon.anonymize_table('<table_name>');
-
O mascaramento estático é um processo lento. O princípio do mascaramento estático é atualizar todas as linhas de todas as tabelas que contenham pelo menos uma coluna mascarada. Isso significa que o PostgreSQL reescreverá todos os dados no disco. Dependendo do tamanho do banco de dados, do hardware e da configuração da instância, pode ser mais rápido exportar os dados anônimos e recarregá-los no banco de dados.
-
Para aplicar o mascaramento a linhas recém-inseridas em uma tabela, execute o seguinte comando.
SELECT anon.anonymize_table('<table_name>');Esse comando garante que todos os novos dados adicionados à tabela sejam mascarados de acordo com as regras de anonimização configuradas.
Mascaramento dinâmico
O mascaramento dinâmico permite que o proprietário do banco de dados oculte dados confidenciais para usuários específicos, enquanto permite que usuários autorizados acessem e modifiquem os valores originais e não mascarados. Para obter mais informações, consulte Mascaramento dinâmico.
Ativação do mascaramento dinâmico
-
Instale a extensão Anonymizer.
CREATE EXTENSION IF NOT EXISTS anon; -
Inicialize o anonimizador.
select public.run_anon_init(); -
Ativar o mecanismo de mascaramento dinâmico.
show anon.transparent_dynamic_masking; select public.enable_dynamic_masking ('<database_name>');Reinicie sua sessão se anon.transparent_dynamic_masking estiver sendo exibido como desativado.
-
Crie a função para acesso mascarado.
CREATE ROLE <role_name> LOGIN; -
Marque a função como um usuário mascarado.
SECURITY LABEL FOR anon ON ROLE <role_name> IS 'MASKED'; -
Conceder permissões na tabela de mascaramento a uma função.
grant select on <schema_name>.<table_name> to <role_name> ; -
Declare as regras de mascaramento.
SECURITY LABEL FOR anon ON COLUMN <table_name>.<column_name> IS 'MASKED WITH FUNCTION anon.<masking_function>()'; -
Verifique as regras de mascaramento.
SELECT objoid::regclass, provider, label FROM pg_seclabel WHERE provider = 'anon' AND objoid = '<table_name>'::regclass; -
Conecte-se ao banco de dados usando a função mascarada e consulte a tabela. Você deverá ver os dados mascarados de acordo com as regras definidas.
select * from <table_name>;
Notas:
- O anonimizador mascara os dados com base em quem está consultando.
- As funções mascaradas não devem ter permissão para inserir, atualizar ou excluir dados.
- Você pode mascarar a tabela em vários esquemas.
- Uma regra de mascaramento pode quebrar a integridade dos dados. Por exemplo, você pode mascarar uma coluna que tenha uma restrição UNIQUE com o valor NULL. Cabe a você decidir se os usuários da máscara precisam ou não da integridade dos dados.
- As funções mascaradas não têm permissão para usar o EXPLAIN.
Despejos anônimos
Um dump anônimo refere-se ao processo de exportação de um banco de dados que contém dados anônimos ou não identificados, em vez dos valores confidenciais originais. Normalmente, isso é feito para compartilhar, migrar ou analisar dados com segurança sem expor informações de identificação pessoal (PII) ou atributos confidenciais. Para obter mais informações, consulte Despejos anônimos.
Habilitação de despejos anônimos
-
Instale a extensão Anonymizer.
CREATE EXTENSION IF NOT EXISTS anon; -
Inicialize o anonimizador.
select public.run_anon_init(); -
Crie um esquema dedicado para funções de mascaramento personalizadas.
CREATE SCHEMA IF NOT EXISTS <schema_name>; -
Criar uma função para exportar dados mascarados.
CREATE ROLE <role_name> LOGIN PASSWORD '<enter_password>'; -
Ativar o mascaramento da função.
select public.enable_masking_for_dump('<role_name>','<schema_name>'); -
Defina uma função de mascaramento personalizada, como no exemplo a seguir.
CREATE OR REPLACE FUNCTION <schema_name>.remove_content(j JSONB) RETURNS JSONB AS $func$ SELECT j - ARRAY['content'] $func$ LANGUAGE SQL; -
Crie uma regra de mascaramento.
SECURITY LABEL FOR anon ON COLUMN <table_name>.<column_name> IS 'MASKED WITH FUNCTION <schema_name>.<custom_masking_function>()'; -
Identifique a função como uma função mascarada.
SECURITY LABEL FOR anon ON ROLE <schema_name> IS 'MASKED'; -
Conceder acesso ao esquema mascarado.
GRANT USAGE ON SCHEMA <schema_name> TO <masked_role>; -
Conceder acesso Select em tabelas mascaradas.
grant select ON <schema_name>.<table_name> to <masked_role>;
- Exportar dados mascarados usando o pg_dump como função mascarada.
Para obter mais informações, consulte Comandos pg dump.
Para exportar dados mascarados, execute o pg_dump usando a função mascarada. Se o pg_dump for executado por um usuário administrador, os dados serão exportados sem mascaramento.
Generalização
A ideia principal da generalização é desfocar os dados originais. Para obter mais informações, consulte Generalização.
Possibilitando a generalização
-
Instale a extensão do anonimizador.
CREATE EXTENSION IF NOT EXISTS anon; -
Inicializar o anonimizador.
select public.run_anon_init(); -
Crie uma visualização usando funções de generalização.
CREATE MATERIALIZED VIEW <view_name> AS SELECT anon.generalize_daterange(<date_column_1>, 'month') AS <generalized_date_1>, anon.generalize_daterange(<date_column_2>, 'month') AS <generalized_date_2> FROM <source_table>; -
Declare identificadores indiretos.
SECURITY LABEL FOR k_anonymity ON COLUMN <view_name>.<generalized_date_1> IS 'INDIRECT IDENTIFIER'; SECURITY LABEL FOR k_anonymity ON COLUMN <view_name>.<generalized_date_2> IS 'INDIRECT IDENTIFIER'; -
Conceder acesso ao k-anonimato.
select public.k_anonymity(); -
Execute a verificação de k-anonimato na exibição ou na tabela.
SELECT anon.k_anonymity('<view_name/table_name>');
Desmascarar uma função
Use o seguinte comando para desmascarar uma função.
SECURITY LABEL FOR anon ON ROLE <role_name> IS NULL;
Desativar regra de mascaramento
Use o seguinte comando para desativar a função de mascaramento.
SECURITY LABEL FOR anon
ON COLUMN <table_name>.<column_name>
IS NULL;