En la majoria de base de dades sempre hi ha algun camp que conté informació potencialment sensible (nom, nif, iban, etc). Aquesta informació és necessària per al funcionament de les nostres aplicacions , però no té perquè ser consultable per totes les usuàries amb accés a la base de dades, o a vegades també volem poder tenir un backup de la base de dades sense aquestes dades per tal de poder-les enviar a algun proveïdor extern o fer proves en entorns d’staging.

Amb el plugin de PostgreSQL pg_anonymize es poden crear regles d’emmascarament de camps segons l’usuari que s’ha loguejat. A més, si fem un pg_dump amb aquest usuari el backup creat també tindrà els camps emascarats.

Com instal·lar pg_anonymize?

Per instal·lar pg_anonymize cal baixar-se el projecte del repositori git:
– https://github.com/rjuju/pg_anonymize
i fer un make i make install.

Un cop instal·lat ens loguegem a la base de dades i executem:

LOAD 'pg_anonymize';

En aquest moment podem crear un usuari en que s’apliquen les regles d’anonimització.

CREATE ROLE oc with LOGIN;
ALTER ROLE oc SET session_preload_libraries = 'pg_anonymize';

I podem crear regles del tipus:

SECURITY LABEL FOR pg_anonymize ON COLUMN public.customer.last_name
IS $$substr(last_name, 1, 1) || '*'$$;
SECURITY LABEL FOR pg_anonymize ON COLUMN public.customer.birthday
IS $$date_trunc('year', birthday)::date$$;
SECURITY LABEL FOR pg_anonymize ON COLUMN public.customer.phone_number
IS $$regexp_replace(phone_number, '\d', 'X', 'g')$$;

A partir d’aquest moment quan algú es loguegi amb l’usuari oc directament veurà les columnes last_name, birthday i phone_number amb la regla d’anonimització creada. També en cas de fer un pg_dump.
Al fer un restore del backup generat l’usuari que fa el restore no tindrà informació de quins camps estan anonimitzats i quins no.

Rendiment

Cal tenir en compte que el resultat de les regles d’anonimització no està persistit, amb el que per cada camp anonimitzat s’haurà de fer el càlcul en temps de consulta. Això pot afectar al rendiment, sobretot si es fan consultes amb joins o filtres sobre camps anonimitzats.

Més informació

Podeu trobar més informació al blog de postgres:
https://www.postgresql.org/about/news/pg_anonymize-a-new-extension-for-simple-and-transparent-data-anonymization-2606/