Respectons (enfin) l’article 25 du RGPD avec PostgreSQL Anonymizer

Nicolas GUILHEM 13/02/2026 - 13h30

J’ai un bug de prod impossible à reproduire. Il me faut les données de prod !
— Développeur
Un utilisateur demande à supprimer ses données personnelles. Il me faut l’accès à la base de prod !
— Développeur
Il me manque des jeux de données, il n’y a pas assez de volume, ce n’est pas le reflet de la réalité. Il me faut les données de prod !
— Testeur
Le métier me demande des rapports d’analyse, il me faut les données de prod !
— Statisticien

Nicolas Guilhem

Tech Lead | Architecte

onepoint

nicolasguilhem

nico

RGPD

Les grands principes

  • Consentement explicite

  • Transparence

  • Droit d’accès

  • Droit de rectification

  • Droit à l’effacement

  • Droit d’opposition

  • Notification en cas de fuite

Article 25 - § 1

le responsable du traitement met en œuvre, tant au moment de la détermination des moyens …​ qu’au moment du traitement lui-même, des mesures techniques et organisationnelles appropriées …​ destinées …​ à la protection des données

Privacy by Design

Protection des données dès la conception

  • Obligation de proactivité et intégration précoce

  • La protection des données doit être prise en compte dès le début du projet, et non ajoutée a posteriori

Article 25 - § 2

Le responsable du traitement …​ garantit que …​ par défaut, seules les données à caractère personnel qui sont nécessaires …​ sont traitées. …​ ces mesures garantissent que, par défaut, les données …​ ne sont pas rendues accessibles à un nombre indéterminé de personnes …​

Privacy by Default

Protection des données par défaut

Les paramètres doivent être configurés pour limiter par défaut le traitement des données personnelles

Anonymisation ≠ Pseudonymisation

  • Pseudonymisation = protection des données ⚠️ toujours soumis au RGPD

  • Anonymisation = destruction des données

Singularisation

Identifier un individu de façon indirecte

ÂgeMailCommunePosteSalaire

[30-40]

xxxxxx@xxx.fr

Amboise

DevOps

48 000

[40-50]

xxxxxx@xxx.com

Tours

Data Scientist

52 000

[30-40]

xxxxxx@xxx.com

Montlouis-sur-Loire

Développeur Fullstack

42 000

[30-40]

xxxxxx@xxx.fr

Amboise

Architecte Cloud

65 000

…​

…​

…​

…​

…​

Recoupement

  1. données anonymisées

  2. sources externes non anonymisées

  3. Ré-identification d’individus

Inférence

Déduire une information sensible non mentionnée

DeAHorodatageDurée

06xxxxxxxx32

07xxxxxxxx98

05/02/2026 à 22h12

1h 30

07xxxxxxxx98

06xxxxxxxx32

06/02/2026 à 22h02

1h 10

06xxxxxxxx32

07xxxxxxxx98

09/02/2026 à 21h55

2h 12

06xxxxxxxx32

07xxxxxxxx98

10/02/2026 à 22h10

1h 30

…​

…​

…​

…​

PostgreSQL Anonymizer

PostgreSQL Anonymizer

Principes

  1. Approche déclarative

  2. Anonymisation by design

  3. Anonymisation by default

Fonctionnalités

  • Détection des données sensibles

  • Anonymisation statique

  • Anonymisation dynamique

  • Dump anonymisé

  • Fonctions d’anonymisation (données aléatoires, données mélangées, fausses données, généralisation, brouillage partiel, …​)

Installation

apt install postgresql_anonymizer_17
ALTER DATABASE foo SET session_preload_libraries = 'anon';
CREATE EXTENSION anon;
SELECT anon.init();

Déclaration de la politique d’anonymisation

SECURITY LABEL [ FOR provider ]

ON PostgreSQL object

IS { string_literal | NULL };

SECURITY LABEL FOR anon ON ROLE dev IS 'MASKED';

SECURITY LABEL FOR anon ON COLUMN player.last_name
  IS 'MASKED WITH FUNCTION anon.dummy_last_name()';

Modèle de données

db schema

Quelles données anonymiser ?

SELECT anon.detect();

Les différentes stratégies

  • Anonymisation statique

  • Anonymisation dynamique

  • Dump anonymisé

Synthèse

Synthèse

  • Privacy by design

  • Identifier les cas d’usage

  • Utiliser PostgreSQL-Anonymizer