13 Masquage dynamique
Masquage dynamique
Principe du masquage dynamique
- Masquer les données personnelles à certains utilisateurs
- mais pas tous
Avec le masquage dynamique, le propriétaire de la base peut masquer les données personnelles à certains utilisateurs, tout en laissant aux autres les droits de lire et modifier les données réelles.
L’histoire
Paul a 2 employés :
- Jack s’occupe du nouveau logiciel de ventes.
- il a besoin d’accéder aux vraies données
- pour le RGPD c’est un « processeur de données »
- Pierre est un analyste qui exécute des requêtes statistiques
- il ne doit pas avoir accès aux données personnelles
Comment ça marche

Objectifs de la section
Nous allons voir :
- comment écrire des règles de masquage simple
- les avantages et limitations du masquage dynamique
- le concept de « recoupement » d’une personne (linkability)
Table « company »
Quelques données
Table « supplier »
Quelques données
Activer l’extension
Activer le masquage dynamique
Rôle masqué
- Attention : pas d’héritage du
SECURITY LABEL!
Le rôle pierre devient « masqué », dans le sens où le super-utilisateur va pouvoir lui imposer un masque qui va changer sa vision des données.
En tant que Pierre, on essaie de lire la table des fournisseurs :
Pour le moment, il n’y a pas de règle de masquage : Pierre peut voir les données originales dans chaque table.
PostgreSQL ne gère pas l’héritage des
SECURITY LABEL. Il n’est donc pas possible de l’attribuer à un groupe. Il faut attribuer explicitement unSECURITY LABELà chaque rôle concerné.
Lister les rôles masqués
Les rôles masqués peuvent être listés grâce à la requête ci-dessus :
Masquer le nom des fournisseurs
En tant que Paul, une règle de masquage se définit ainsi :
Pierre essaie de lire la table des fournisseurs :
Si Jack essaie de lire les vraies données, ce sont encore les bonnes :
Exercices
Pour rappel, sauf précision contraire, toutes les commandes sont à exécuter en tant que paul (le propriétaire).
E201 - Deviner qui est le PDG de « Johnny’s Shoe Store »
Masquer le nom du fournisseur n’est pas suffisant pour anonymiser les données.
- Se connecter en tant que Pierre. Écrire une requête avec une jointure entre
supplieretcompany, permettant ainsi de recouper certains fournisseurs- en se basant sur leur poste et leur société.
Les noms des sociétés et les postes de travail sont disponibles dans de nombreux jeux de données publics. Une simple recherche sur LinkedIn ou Google révèle les noms des principaux dirigeants de la plupart des sociétés…
On nomme « recoupement » la possibilité de rapprocher plusieurs données concernant la même personne.
E202 - Anonymiser les sociétés
Nous devons donc anonymiser aussi la table company. Même si elle ne contient pas d’informations personnelles, certains champs peuvent être utilisés pour identifier certains de leurs employés…
- Écrire deux règles de masquage pour la table
company.\ - La première doit remplacer le champ
nomavec un faux nom.\ - La seconde remplacer
vat_idavec une suite aléatoire de dix caractères. \ - NB : dans la documentation, consulter les générateurs de données factices et fonctions aléatoires (faking functions).
- Vérifier que Pierre ne peut pas voir les vraies données sur la société.
E203 - Pseudonymiser le nom des sociétés
À cause du masquage dynamique, les valeurs artificielles sont différentes à chaque fois que Pierre lit la table. Ce n’est pas toujours très pratique.
Pierre préfère appliquer tout le temps les mêmes valeurs artificielles pour une même société. Cela correspond à la « pseudonymisation ».
La pseudonymisation consiste à générer systématiquement les mêmes données artificielles pour un individu donné à la place de ses données réelles.
- Écrire une nouvelle règle de masquage à partir du champ
name, - grâce à une fonction de pseudonymisation.
Solutions
S201
- Se connecter en tant que Pierre. Écrire une requête avec une jointure entre
supplieretcompany, permettant ainsi de recouper certains fournisseurs- en se basant sur leur poste et leur société.
S202
- Écrire deux règles de masquage pour la table
company.\ - La première doit remplacer le champ
nomavec un faux nom.\ - La seconde remplacer
vat_idavec une suite aléatoire de dix caractères. \
En tant que Paul, les données sont inchangées :
En tant que pierre, relire la table :
À chaque lecture de la table, Pierre voit des données différentes :
S203
- Écrire une nouvelle règle de masquage à partir du champ
name, - grâce à une fonction de pseudonymisation.
Pour Pierre, les valeurs pseudonymisées resteront identiques entre deux appels (mais pas le code TVA) :
Navigation
Pour revenir au chapitre précédent, voir le chapitre précédent. Pour poursuivre la lecture, voir le chapitre suivant.