14 Sauvegardes anonymes
Sauvegardes anonymes
Dans beaucoup de situations, le besoin est simplement d’exporter les données anonymisées pour les importer dans une autre base de données, pour mener des tests ou produire des statistiques.
postgresql_anonymizer permet de générer des sauvegardes logiques anonymisées avec pg_dump.
Les outils
pg_dump_anon.shetpg_dump_anondes versions 0.x ou 1.x de postgresql_anonymizer sont dépréciés. Modifiez vos scripts pour utiliserpg_dump.
L’histoire
Paul a un site web qui dispose d’une section commentaires où les utilisateurs peuvent partager leurs points de vue.
Paul a engagé un prestataire pour développer le nouveau design de son site web.
Le prestataire lui demande un export de la base de données.
Paul veut « nettoyer » le dump et y retirer toute information personnelle qui pourrait figurer dans la section commentaire.
Comment ça marche ?

Objectifs
- Extraire les données anonymisées de la base de données
- Écrire une fonction de masquage personnalisée pour gérer une colonne de type JSON
Table « website_comment »
Quelques données
Activer l’extension
Masquer une colonne de type JSON
Généralement, les données non structurées sont difficiles à masquer…
La colonne comment contient beaucoup d’informations personnelles. Le fait de ne pas utiliser un schéma standard pour les commentaires rend ici la tâche plus complexe.
Comme on peut le voir, les visiteurs du site peuvent écrire toutes sortes d’informations dans la section « commentaire ». La meilleure option serait donc de supprimer entièrement la clé JSON car il est impossible d’y exclure les données sensibles.
Il est possible de nettoyer la colonne comment en supprimant la clé content :
Ici, ARRAY['content'] est un tableau (ARRAY) contenant une seule valeur, content. L’opérateur - est utilisé pour supprimer toutes les occurrences de content du tableau message.
Fonctions de masquage personnalisées
- Super-utilisateurs seulement !
Créer en premier lieu un schéma dédié, ici my_masks, et le déclarer en TRUSTED (« de confiance »). Cela signifie que l’extension anon va considérer les fonctions de ce schéma comme des fonctions de masquage valides.
Seul un super-utilisateur devrait être capable d’ajouter des fonctions dans ce schéma !
Cette fonction de masquage se contente de supprimer du JSON le champ avec le message :
Exécuter la fonction :
La fonction va pouvoir ensuite être utilisée dans une règle de masquage.
Utilisation de la fonction de masquage personnalisée
Sauvegarde anonymisée (1/2)
Créer un rôle dédié pour les exports anonymisés :
Saisir le mot du passe de l’utilisateur anon_dumper :
En tant qu’utilisateur système postgres, compléter le fichier .pgpass :
Remplacer par le mot de passe au rôle anon_dumper
Sauvegarde anonymisée (2/2)
Depuis l’utilisateur système postgres :
On utilise l’outil habituel de sauvegarde pg_dump mais avec un rôle masqué.
Il est possible d’obtenir les données au format plain ou binaire.
Exercices
Pour rappel, sauf précision contraire, toutes les commandes sont à exécuter en tant que paul (le propriétaire).
E301 - Exporter les données anonymisées dans une nouvelle base de données
- Créer une base de données nommée boutique_anon.
- Charger l’extension
anondans la base de données boutique_anon, et - y insérer les données anonymisées provenant de la base de données boutique.
E302 - Pseudonymiser les métadonnées du commentaire
Pierre compte extraire des informations générales depuis les métadonnées. Par exemple, il souhaite calculer le nombre de visiteurs uniques sur la base des adresses IP des visiteurs, mais une adresse IP est un identifiant indirect.
Paul doit donc anonymiser cette colonne tout en conservant la possibilité de faire le lien entre les enregistrements provenant de la même adresse.
- Remplacer la fonction
remove_contentpar la fonctionclean_comment(ci-dessous), qui :- supprime la clé JSON
content; - remplace la valeur dans la colonne
namepar un faux nom ; - remplace l’adresse IP dans la colonne
ip_addresspar sa somme de contrôlemd5; - met à
NULLla cléemail.
- supprime la clé JSON
Solutions
S301
- Créer une base de données nommée boutique_anon.
- Charger l’extension
anondans la base de données boutique_anon, et - y insérer les données anonymisées provenant de la base de données boutique.
Chargement de l’extension :
Insertion des données anonymisées dans boutique_anon :
S302
- Remplacer la fonction
remove_contentpar la fonctionclean_comment(ci-dessous), qui :- supprime la clé JSON
content; - remplace la valeur dans la colonne
namepar un faux nom ; - remplace l’adresse IP dans la colonne
ip_addresspar sa somme de contrôlemd5; - met à
NULLla cléemail.
- supprime la clé JSON
Suite à l’utilisation de la fonction personnalisée clean_comment, les données n’ont plus rien à voir :
On applique le masquage comme à l’habitude :
Navigation
Pour revenir au chapitre précédent, voir le chapitre précédent. Pour poursuivre la lecture, voir le chapitre suivant.