12 Masquage statique
Masquage statique
- Le plus simple
- Destructif
Le masquage statique est la méthode la plus simple pour cacher des données personnelles. L’idée est simplement de détruire les données originales et de les remplacer par des données artificielles.
L’histoire
Au fil des années, Paul a accumulé des données sur ses clients et leurs achats dans une base de données très simple.
Il a récemment installé un nouveau logiciel de ventes, et l’ancienne base est obsolète.
Avant de l’archiver, il voudrait en supprimer toutes les données personnelles.
Comment ça marche ?

Objectifs
Nous allons voir :
- comment écrire des règles de masquage simples
- les intérêts et limitations du masquage statique
- le concept de « singularisation » d’une personne (singling out)
Table « customer »
Quelques clients
Insertion de quelques personnes :
Table « payout »
Les ventes sont suivies dans cette simple table :
Quelques données
Quelques commandes :
Déclarer et appliquer les règles de masquage
Pour le masquage statique, deux étapes :
- Déclaration des règles de masquage (
SECURITY LABEL); - Application des règles de masquage.
Pour le masquage statique, la déclaration des règles de masquage est à faire avant leur application. Cette déclaration passe par la création de SECURITY LABEL.
Le masquage statique est exécuté par les fonctions anon.anonymize_table() et anon.anonymize_column()
Déclarer les règles de masquage
Dans cet exemple, Paul veut masquer le nom de famille et le numéro de téléphone de ses clients.
Pour cela, il utilise les fonctions dummy_last_name() et partial().
Appliquer les règles de manière permanente
Application des règles de masquage :
Cette fonction ne fait qu’appliquer la règle et doit renvoyer True. Ensuite :
Cette technique est nommée « masquage statique » car la donnée réelle a été détruite de manière définitive. L’anonymisation dynamique et les exports seront vus plus loin.
Gestion des SECURITY LABEL
- Obtenir la liste des labels :
- Suppression d’un label :
Les règles de masquage passent systématiquement par des SECURITY LABEL définis pour le schéma anon.
En cas d’erreur lors de la déclaration d’une fonction de masquage, il n’y a pas d’autre solution que de supprimer et de recréer le label.
Exercices
E101 - Masquer les prénoms des clients
- Déclarer une nouvelle règle de masquage et relancer l’anonymisation statique.
E102 - Masquer les 3 derniers chiffres du code postal
Paul réalise que le code postal est un bon indice sur l’endroit où vivent ses clients. Cependant, il voudrait pouvoir faire des statistiques par département.
- Créer une règle de masquage pour remplacer les 3 derniers chiffres du code postal par ‘x’.
E103 - Compter le nombre de clients dans chaque département.
- Agréger les clients selon le code postal anonymisé.
E104 - Ne garder que l’année dans les dates de naissance
Paul veut des statistiques selon l’âge. Mais il veut aussi masquer les vraies dates de naissance de ses clients.
- Remplacer toutes les dates de naissance par le 1er janvier, en conservant l’année réelle. \
- Utiliser la fonction date_trunc.
E105 - Identifier un client particulier
Même si un client est correctement anonymisé, il est possible d’isoler un individu grâce à des données d’autres tables. Par exemple, il est possible d’identifier le meilleur client de Paul avec une telle requête :
Ce processus est appelé « singularisation » (singling out) d’une personne.
Il faut donc aller plus loin dans l’anonymisation, en supprimant le lien entre une personne et sa société. Dans la table des commandes order, ce lien est matérialisé par une clé étrangère sur le champ fk_company_id. Mais nous ne pouvons supprimer des valeurs de cette colonne ou y insérer de faux identifiants, car cela briserait la contrainte de clé étrangère.
Comment séparer les clients de leurs paiements tout en respectant l’intégrité des données ?
- Trouver une fonction qui mélange les valeurs de
fk_company_iddans la tablepayout.\ - Consulter la section shuffling de la documentation.
Solutions
S101
- Déclarer une nouvelle règle de masquage et relancer l’anonymisation statique.
La table anonymisée devient :
S102
- Créer une règle de masquage pour remplacer les 3 derniers chiffres du code postal par ‘x’.
Le code postal anonymisé devient :
Noter que les noms ont encore changé après application de anon.anonymize_table().
S103
- Agréger les clients selon le code postal anonymisé.
S104
- Remplacer toutes les dates de naissance par le 1er janvier, en conservant l’année réelle. \
- Utiliser la fonction date_trunc.
Les dates de naissance anonymisées deviennent :
S105
- Trouver une fonction qui mélange les valeurs de
fk_company_iddans la tablepayout.\ - Consulter la section shuffling de la documentation.
Pour mélanger les valeurs de fk_customer_id :
Si l’on essaie à nouveau d’identifier le meilleur client :
Noter que le lien entre un client (
customer) et ses paiements (payout) est à présent complètement faux !
Par exemple, si un client A a deux paiements, l’un se retrouvera associé à un client B, et l’autre à un client C. En d’autres termes, cette méthode de mélange respectera la contrainte d’intégrité technique, mais brisera l’intégrité des données. Pour certaines utilisations, ce peut être problématique.
Ici, Pierre ne pourra pas produire de rapport avec les données mélangées.
Navigation
Pour revenir au chapitre précédent, voir le chapitre précédent. Pour poursuivre la lecture, voir le chapitre suivant.