PostgreSQL : anonymisation de vos sauvegardes logiques

Les stagiaires que je suis en train de former à PostgreSQL m’ont demandé de leur montrer comment anonymiser leurs données de sauvegarde. C’est quelque chose de très simple à réaliser.

Installer l’extension anonymizer

Après avoir installé PostgreSQL 13 à partir des dépôts de l’éditeur sur une CentOS 8, ajoutez le paquet postgresql_anonymizer13 à votre distribution Linux, le chiffre 13 indiquant le numéro de la version du moteur de bases de données Open Source.

yum install postgresql_anonymizer13

Mettre en œuvre l’extension anonymizer dans PostgreSQL

Après vous être connecté à PostgreSQL avec l’outil de votre choix (psql, PgAdmin4, dBeaver, HeidiSQL), vous devez d’abord installer votre extension dans la base où se trouve ta table des données à anonymiser :

CREATE EXTENSION anon CASCADE;

Ensuite, tapez la commande suivante au niveau des colonnes que vous souhaitez anonymiser lors de vos sauvegardes :

COMMENT ON COLUMN main.societe.societe_nom IS 'MASKED WITH FUNCTION md5(societe_nom)';

Dans l’exemple ci-dessus la colonne societe_nom appartient à la table societe du schéma main. Et nous nous servons de la fonction md5 pour chiffrer les données. Vous pouvez utiliser toutes les fonctions de votre choix, comme REPLACE ou REGEX_REPLACE. Vous avez aussi la possibilité d’utiliser des fonctions propres à l’extension PostgreSQL Anonymizer.

La sauvegarde anonymisée de vos données

La sauvegarde ne se fait pas avec pg_dump, mais avec la commande pg_dump_anon installée avec le paquet postgresql_anonymizer13 à l’aide d’un compte trust – ayant le droit de se connecter sans mot de passe – à activer dans votre fichier /var/lib/pgsql/13/data/pg_hba.conf, disposant des droits de lecture sur la base de données où se trouve votre table.

host	bdcrm		admin		0.0.0.0/0		trust

Pensez à recharger la configuration de l’instance PostgreSQL à l’aide de la commande systemctl :

systemctl reload postgresql-13

La sauvegarde anonymisée va pouvoir se réaliser à l’aide de la commande pg_dump_anon comme suit, bdcrm étant la base à sauvegarder et bdcrm.sql étant le fichier de sauvegarde :

/usr/pgsql-13/bin/pg_dump_anon -n main -c -C -d bdcrm -U admin -w -h 192.168.1.113 -f bdcrm.sql

Vérification du contenu du fichier

Dans le fichier bdcrm.sql, le champ societe_nom a bien été anonymisé à l’aide de la fonction md5. CQFD

COPY main.societe FROM STDIN WITH CSV;
2,90b0e533aa91ab02e2992f47fa8b86bd,31000,Toulouse
5,34fe790bda55391aa1b181a467c1f3d1,27520,SAINT-LÉGER-DU-GENNETEY
4,25442aa1d5d81e101966bd10dc9d74a5,27800,SAINT-ELOI-DE-FOURQUES
3,c49e10d2414d1b254e63413a611731b6,31670,LABÈGE
\.

Ressources

Pour réaliser ce tuto, j’ai utilisé ces quelques pages:

Base de données  / Formateur PostgreSQL