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

  1. Installare l'estensione Anonymizer.

    CREATE EXTENSION IF NOT EXISTS anon;
    
  2. Inizializzare l'anonimizzatore.

    select public.run_anon_init();
    
  3. Definire le regole di mascheramento.

    SECURITY LABEL FOR anon
      ON COLUMN <table_name>.<column_name>
      IS 'MASKED WITH FUNCTION anon.<masking_function>()';
    
  4. Verificare le regole di mascheramento applicate.

    SELECT objoid::regclass, provider, label
    FROM pg_seclabel
    WHERE provider = 'anon' AND objoid = '<table_name>'::regclass;
    
  5. 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

  1. Installare l'estensione Anonymizer.

    CREATE EXTENSION IF NOT EXISTS anon;
    
  2. Inizializzare l'anonimizzatore.

    select public.run_anon_init();
    
  3. 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.

  4. Creare il ruolo per l'accesso mascherato.

    CREATE ROLE <role_name> LOGIN;
    
  5. Contrassegnare il ruolo come utente mascherato.

      SECURITY LABEL FOR anon ON ROLE <role_name> IS 'MASKED';
    
  6. Concedere le autorizzazioni sulla tabella di mascheramento a un ruolo.

      grant select on <schema_name>.<table_name> to <role_name> ;
    
  7. Dichiarare le regole di mascheramento.

    SECURITY LABEL FOR anon
      ON COLUMN <table_name>.<column_name>
      IS 'MASKED WITH FUNCTION anon.<masking_function>()';
    
  8. Verificare le regole di mascheramento.

    SELECT objoid::regclass, provider, label
    FROM pg_seclabel
    WHERE provider = 'anon' AND objoid = '<table_name>'::regclass;
    
  9. 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

  1. Installare l'estensione Anonymizer.

    CREATE EXTENSION IF NOT EXISTS anon;
    
  2. Inizializzare l'anonimizzatore.

    select public.run_anon_init();
    
  3. Creare uno schema dedicato per le funzioni di mascheramento personalizzate.

     CREATE SCHEMA IF NOT EXISTS <schema_name>;
    
  4. Creare un ruolo per l'esportazione di dati mascherati.

     CREATE ROLE <role_name> LOGIN PASSWORD '<enter_password>';
    
  5. Abilita il mascheramento per il ruolo.

    select  public.enable_masking_for_dump('<role_name>','<schema_name>');
    
  6. 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;
    
  7. Creare una regola di mascheramento.

    SECURITY LABEL FOR anon
      ON COLUMN <table_name>.<column_name>
      IS 'MASKED WITH FUNCTION <schema_name>.<custom_masking_function>()';
    
  8. Etichettare il ruolo come ruolo mascherato.

    SECURITY LABEL FOR anon ON ROLE <schema_name> IS 'MASKED';
    
  9. Consente l'accesso allo schema mascherato.

    GRANT USAGE ON SCHEMA <schema_name> TO <masked_role>;
    
  10. Concedere l'accesso Select alle tabelle mascherate.

grant select ON <schema_name>.<table_name> to <masked_role>;
  1. 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

  1. Installare l'estensione anonymizer.

    CREATE EXTENSION IF NOT EXISTS anon;
    
  2. Inizializza l'anonimizzatore.

    select public.run_anon_init();
    
  3. 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>;
    
  4. 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';
    
  5. Concedere l'accesso al k-anonimato.

    select public.k_anonymity();
    
  6. 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;