Mascheramento dei dati con PostgreSQL Anonymizer
Databases for PostgreSQL Anonymizer è un'estensione di PostgreSQL progettata per anonimizzare i dati, mascherando o sostituendo le informazioni commerciali sensibili e di identificazione personale in un database Databases for PostgreSQL.
L'estensione supporta le seguenti strategie di mascheramento, ciascuna adatta a diversi casi d'uso:
- Mascheramento statico: Rimuovere le PII in base alle regole.
- Mascheramento dinamico: nascondere le PII solo per gli utenti mascherati.
- Dump anonimi: È sufficiente esportare i dati mascherati in un file SQL.
- Generalizzazione: Sostituisce i valori specifici con categorie o intervalli più ampi e meno precisi.
Mascheramento statico
Il mascheramento statico è una tecnica di anonimizzazione dei dati che sostituisce in modo irreversibile le informazioni sensibili con valori generati sinteticamente, valori sintetici che preservano il formato. Questo processo garantisce la rimozione completa e permanente dei dati originali, eliminando in tal modo la possibilità di una nuova identificazione o ricostruzione. Per ulteriori informazioni, vedere Mascheramento statico.
Abilitazione del mascheramento statico
-
Installare l'estensione Anonymizer.
CREATE EXTENSION IF NOT EXISTS anon; -
Inizializzare l'anonimizzatore.
select public.run_anon_init(); -
Definire le regole di mascheramento.
SECURITY LABEL FOR anon ON COLUMN <table_name>.<column_name> IS 'MASKED WITH FUNCTION anon.<masking_function>()'; -
Verificare le regole di mascheramento applicate.
SELECT objoid::regclass, provider, label FROM pg_seclabel WHERE provider = 'anon' AND objoid = '<table_name>'::regclass; -
Applica le regole in modo permanente. il comando sottostante sostituisce in modo permanente i dati originali della tabella specificata con i dati mascherati.
SELECT anon.anonymize_table('<table_name>');
-
La mascheratura statica è un processo lento. Il principio della mascheratura statica consiste nell'aggiornare tutte le righe di tutte le tabelle contenenti almeno una colonna mascherata. Ciò significa che PostgreSQL riscriverà tutti i dati sul disco. A seconda delle dimensioni del database, dell'hardware e della configurazione dell'istanza, potrebbe essere più veloce esportare i dati anonimizzati e ricaricarli nel database.
-
Per applicare la mascheratura alle righe appena inserite in una tabella, eseguire il seguente comando.
SELECT anon.anonymize_table('<table_name>');Questo comando assicura che tutti i nuovi dati aggiunti alla tabella siano mascherati secondo le regole di anonimizzazione configurate.
Mascheramento dinamico
Il mascheramento dinamico consente al proprietario del database di oscurare i dati sensibili per utenti specifici, mentre consente agli utenti autorizzati di accedere e modificare i valori originali non mascherati. Per ulteriori informazioni, vedere Mascheramento dinamico.
Abilitazione della mascheratura dinamica
-
Installare l'estensione Anonymizer.
CREATE EXTENSION IF NOT EXISTS anon; -
Inizializzare l'anonimizzatore.
select public.run_anon_init(); -
Attivare il motore di mascheratura dinamica.
show anon.transparent_dynamic_masking; select public.enable_dynamic_masking ('<database_name>');Riavviare la sessione se anon.transparent_dynamic_masking risulta disattivato.
-
Creare il ruolo per l'accesso mascherato.
CREATE ROLE <role_name> LOGIN; -
Contrassegnare il ruolo come utente mascherato.
SECURITY LABEL FOR anon ON ROLE <role_name> IS 'MASKED'; -
Concedere le autorizzazioni sulla tabella di mascheramento a un ruolo.
grant select on <schema_name>.<table_name> to <role_name> ; -
Dichiarare le regole di mascheramento.
SECURITY LABEL FOR anon ON COLUMN <table_name>.<column_name> IS 'MASKED WITH FUNCTION anon.<masking_function>()'; -
Verificare le regole di mascheramento.
SELECT objoid::regclass, provider, label FROM pg_seclabel WHERE provider = 'anon' AND objoid = '<table_name>'::regclass; -
Collegarsi al database utilizzando il ruolo mascherato e interrogare la tabella. Si dovrebbero vedere i dati mascherati secondo le regole definite.
select * from <table_name>;
Note:
- L'anonimizzatore maschera i dati in base a chi li interroga.
- I ruoli mascherati non devono essere autorizzati a inserire, aggiornare o eliminare dati.
- È possibile mascherare le tabelle in più schemi.
- Una regola di mascheramento può compromettere l'integrità dei dati. Ad esempio, è possibile mascherare una colonna con vincolo UNIQUE con il valore NULL. Sta a voi decidere se gli utenti della maschera necessitano o meno dell'integrità dei dati.
- I ruoli mascherati non possono usare EXPLAIN.
Scarichi anonimi
Un dump anonimo si riferisce al processo di esportazione di un database che contiene dati anonimizzati o de-identificati, anziché i valori sensibili originali. Questo avviene in genere per condividere, migrare o analizzare i dati in modo sicuro senza senza esporre informazioni di identificazione personale (PII) o attributi sensibili. Per ulteriori informazioni, vedere Scarichi anonimi.
Abilitazione dei dump anonimi
-
Installare l'estensione Anonymizer.
CREATE EXTENSION IF NOT EXISTS anon; -
Inizializzare l'anonimizzatore.
select public.run_anon_init(); -
Creare uno schema dedicato per le funzioni di mascheramento personalizzate.
CREATE SCHEMA IF NOT EXISTS <schema_name>; -
Creare un ruolo per l'esportazione di dati mascherati.
CREATE ROLE <role_name> LOGIN PASSWORD '<enter_password>'; -
Abilita il mascheramento per il ruolo.
select public.enable_masking_for_dump('<role_name>','<schema_name>'); -
Definire una funzione di mascheramento personalizzata, come nell'esempio seguente.
CREATE OR REPLACE FUNCTION <schema_name>.remove_content(j JSONB) RETURNS JSONB AS $func$ SELECT j - ARRAY['content'] $func$ LANGUAGE SQL; -
Creare una regola di mascheramento.
SECURITY LABEL FOR anon ON COLUMN <table_name>.<column_name> IS 'MASKED WITH FUNCTION <schema_name>.<custom_masking_function>()'; -
Etichettare il ruolo come ruolo mascherato.
SECURITY LABEL FOR anon ON ROLE <schema_name> IS 'MASKED'; -
Consente l'accesso allo schema mascherato.
GRANT USAGE ON SCHEMA <schema_name> TO <masked_role>; -
Concedere l'accesso Select alle tabelle mascherate.
grant select ON <schema_name>.<table_name> to <masked_role>;
- Esportazione di dati mascherati usando pg_dump come ruolo mascherato.
Per ulteriori informazioni, vedere i comandi pg dump.
Per esportare dati mascherati, eseguire pg_dump utilizzando il ruolo mascherato. Se pg_dump viene eseguito da un utente amministratore, i dati saranno esportati senza mascheramento.
Generalizzazione
L'idea principale della generalizzazione è quella di sfocare i dati originali. Per ulteriori informazioni, vedere Generalizzazione.
Consentire la generalizzazione
-
Installare l'estensione anonymizer.
CREATE EXTENSION IF NOT EXISTS anon; -
Inizializza l'anonimizzatore.
select public.run_anon_init(); -
Creare una vista utilizzando le funzioni di generalizzazione.
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>; -
Dichiarare gli identificatori indiretti.
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'; -
Concedere l'accesso al k-anonimato.
select public.k_anonymity(); -
Eseguire il controllo di anonimato k sulla vista o sulla tabella.
SELECT anon.k_anonymity('<view_name/table_name>');
Smascherare un ruolo
Usare il seguente comando per smascherare un ruolo.
SECURITY LABEL FOR anon ON ROLE <role_name> IS NULL;
Disattivare la regola di mascheramento
Usare il seguente comando per disabilitare il ruolo di mascheramento.
SECURITY LABEL FOR anon
ON COLUMN <table_name>.<column_name>
IS NULL;