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: