Guide technique de l’anonymisation des données avec PostgreSQL Anonymizer

Introduction :
L’anonymisation des données est un aspect essentiel de la protection de la vie privée
et de la conformité aux réglementations telles que le RGPD.
PostgreSQL Anonymizer est une extension puissante
pour PostgreSQL qui facilite l’anonymisation des données
sensibles dans une base de données.
Cet article technique fournira un guide
détaillé sur l’utilisation de PostgreSQL Anonymizer
avec des exemples pratiques.

Installation de PostgreSQL Anonymizer :

1) Téléchargement et installation de l’extension PostgreSQL Anonymizer.

[root@dec-pg-prod ~]# yum install postgresql_anonymizer_15
Last metadata expiration check: 0:00:45 ago on Mon Jun 19 04:54:44 2023.

Installing:
postgresql_anonymizer_15 x86_64 1.1.0-1.rhel8 pgdg15 222 k
Installing dependencies:
ddlx_15 noarch 0.23-1.rhel8 pgdg15 30 k

2) Activation de l’extension dans la base de données.

3) Créer l’extension et charger les données d’anonymisation

alter system set shared_preload_libraries = ‘anon’;

pg_ctl restart -D $PGDATA

3.1) creation de la base

create db anonydb

3.2) ajout de l’extension

psql anonydb

CREATE EXTENSION anon CASCADE;

3.3) : Initialiser l’extension

SELECT anon.init();

Trois type d’anonymisation :

1 – Masquage statique

Le masquage statique est le moyen le plus simple de masquer des informations personnelles !
L’idée est simplement de détruire les données originales ou de les remplacer par des données artificielles.

[postgres@dec-pg-stby data]$ psql anonydb
psql (15.3)
Type « help » for help.

anonydb=# CREATE TABLE customer ( id SERIAL PRIMARY KEY, firstname TEXT, lastname
anonydb(# TEXT, phone TEXT, birth DATE, postcode TEXT );

CREATE TABLE
anonydb=# INSERT INTO customer
anonydb-# VALUES (107,’Sarah’,’Conor’,’060-911-0911′, ‘1965-10-10’, ‘90016’),
anonydb-# (258,’Luke’, ‘Skywalker’, NULL, ‘1951-09-25’, ‘90120’),
anonydb-# (341,’Don’, ‘Draper’,’347-515-3423′, ‘1926-06-01’, ‘04520’) ;

INSERT 0 3
anonydb=#
anonydb=# SELECT *
anonydb-# FROM customer;

id | firstname | lastname | phone | birth | postcode
—–+———–+———–+————–+————+———-
107 | Sarah | Conor | 060-911-0911 | 1965-10-10 | 90016
258 | Luke | Skywalker | | 1951-09-25 | 90120
341 | Don | Draper | 347-515-3423 | 1926-06-01 | 04520
(3 rows)

anonydb=#

CREATE TABLE payout ( id SERIAL PRIMARY KEY, fk_customer_id INT REFERENCES
customer(id), order_date DATE, payment_date DATE, amount INT );

INSERT INTO payout
VALUES (1,107,’2021-10-01′,’2021-10-01′, ‘7’),
(2,258,’2021-10-02′,’2021-10-03′, ’20’),
(3,341,’2021-10-02′,’2021-10-02′, ‘543’),
(4,258,’2021-10-05′,’2021-10-05′, ’12’),
(5,258,’2021-10-06′,’2021-10-06′, ’92’) ;

(1 row)

anonydb=# SECURITY LABEL
anonydb-# FOR anon ON COLUMN customer.lastname IS ‘MASKED WITH FUNCTION anon.
anonydb’# fake_last_name()’;
SECURITY LABEL
anonydb=# SECURITY LABEL
anonydb-# FOR anon ON COLUMN customer.phone IS ‘MASKED WITH FUNCTION anon.partial(
anonydb’# phone,2,$$X-XXX-XX$$,2)’;

SECURITY LABEL

anonydb=# SELECT * FROM customer;
id | firstname | lastname | phone | birth | postcode
—–+———–+———–+————–+————+———-
107 | Sarah | Conor | 060-911-0911 | 1965-10-10 | 90016
258 | Luke | Skywalker | | 1951-09-25 | 90120
341 | Don | Draper | 347-515-3423 | 1926-06-01 | 04520
(3 rows)
3.4) fonction d’anonymisation

anonydb=# SELECT anon.anonymize_table(‘customer’);

anonymize_table

t
(1 row)

anonydb=# SELECT * FROM customer;
id | firstname | lastname | phone | birth | postcode
—–+———–+———-+————–+————+———-
107 | Sarah | Robel | 06X-XXX-XX11 | 1965-10-10 | 90016
258 | Luke | Schimmel | | 1951-09-25 | 90120
341 | Don | Predovic | 34X-XXX-XX23 | 1926-06-01 | 04520
(3 rows)

anonydb=#

Cela s’appelle le masquage statique car les données réelles ont été définitivement remplacées

2 – Masquage dynamique

Avec le masquage dynamique, le propriétaire de la base de données peut masquer
les données personnelles pour certains utilisateurs, tandis que d’autres utilisateurs
sont toujours autorisés à lire et écrire les données authentiques.

Le masquage dynamique permet une plus grande flexibilité dans la gestion de la confidentialité des données
. Plutôt que de remplacer les données d’une manière statique pour tous les utilisateurs,
le masquage dynamique permet de contrôler finement l’accès aux données sensibles.

anonydb=# CREATE TABLE company ( id SERIAL PRIMARY KEY, name TEXT, vat_id TEXT
anonydb(# UNIQUE );
CREATE TABLE
anonydb=#
anonydb=# INSERT INTO company
anonydb-# VALUES (952,’Shadrach’, ‘FR62684255667’),
anonydb-# (194,E’Johnny\’s Shoe Store’,’CHE670945644′),
anonydb-# (346,’Capitol Records’,’GB663829617823′) ;
INSERT 0 3
anonydb=#
anonydb=# SELECT *
anonydb-# FROM company;
id | name | vat_id

—–+———————+—————-
952 | Shadrach | FR62684255667
194 | Johnny’s Shoe Store | CHE670945644
346 | Capitol Records | GB663829617823
(3 rows)

anonydb=#
anonydb=# CREATE TABLE supplier ( id SERIAL PRIMARY KEY, fk_company_id INT
anonydb(# REFERENCES company(id), contact TEXT, phone TEXT, job_title TEXT );
CREATE TABLE

anonydb=#
anonydb=# INSERT INTO supplier
anonydb-# VALUES (299,194,’Johnny Ryall’,’597-500-569′,’CEO’),
anonydb-# (157,346,’George Clinton’, ‘131-002-530′,’Sales manager’) ;

INSERT 0 2

anonydb-# FROM supplier;
id | fk_company_id | contact | phone | job_title
—–+—————+—————-+————-+—————
299 | 194 | Johnny Ryall | 597-500-569 | CEO
157 | 346 | George Clinton | 131-002-530 | Sales manager
(2 rows)

Debut du masquage dynamique

anonydb=# SELECT anon.start_dynamic_masking();

start_dynamic_masking

t
(1 row)

anonydb=# create role pierre login;
anonydb=# SECURITY LABEL
FOR anon ON ROLE pierre IS ‘MASKED’;
SECURITY LABEL

anonydb=# create role jack login;
CREATE ROLE
anonydb=# GRANT ALL ON SCHEMA PUBLIC TO jack;
GRANT
anonydb=# GRANT ALL ON ALL TABLES IN SCHEMA PUBLIC TO jack;

anonydb=# \c – pierre
You are now connected to database « anonydb » as user « pierre ».
anonydb=>

anonydb=> SELECT *
anonydb-> FROM supplier;
id | fk_company_id | contact | phone | job_title
—–+—————+—————-+————-+—————
299 | 194 | Johnny Ryall | 597-500-569 | CEO
157 | 346 | George Clinton | 131-002-530 | Sales manager
(2 rows)

4.1) activation du masquage sur la table supplier
\c – postgres

anonydb=# SECURITY LABEL
anonydb-# FOR anon ON COLUMN supplier.contact IS ‘MASKED WITH VALUE $$CONFIDENTIAL$$
anonydb’# ‘;
SECURITY LABEL
anonydb=#

anonydb=# \c – pierre
You are now connected to database « anonydb » as user « pierre ».

anonydb=> SELECT *
FROM supplier;
id | fk_company_id | contact | phone | job_title
—–+—————+————–+————-+—————
299 | 194 | CONFIDENTIAL | 597-500-569 | CEO
157 | 346 | CONFIDENTIAL | 131-002-530 | Sales manager
(2 rows)

anonydb=>

4.2) vification de l’utilisateur jack

anonydb=> \c – jack
You are now connected to database « anonydb » as user « jack ».
anonydb=> SELECT *
FROM supplier;
id | fk_company_id | contact | phone | job_title
—–+—————+—————-+————-+—————
299 | 194 | Johnny Ryall | 597-500-569 | CEO
157 | 346 | George Clinton | 131-002-530 | Sales manager
(2 rows)

pour une version pratique de notre voir la demo
sur https://youtu.be/_fujcW5k_0w

Conclusion :
PostgreSQL Anonymizer est un outil puissant pour l’anonymisation
des données sensibles dans une base de données PostgreSQL.
Cet article a couvert les étapes d’installation,
de configuration et d’utilisation de PostgreSQL Anonymizer, ainsi que des exemples pratiques
pour l’anonymisation des données.
En respectant les réglementations
en matière de confidentialité et en protégeant la vie privée des utilisateurs,
PostgreSQL Anonymizer offre une solution robuste
pour la gestion des données sensibles dans les environnements PostgreSQL.

Post Comment

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *