Anonymiser une base de données MySQL et PostgreSQL

Database Anonymizer est un outil écrit en GO et qui permet d'anonymiser ou supprimer des données d'une base de données MySQL ou PostgreSQL.

Il répond à plusieurs cas d'usage comme permettre de transférer une copie de base de données anonymisée à des développeurs et des développeuses ou répondre à la nécessité d'anonymiser ou supprimer des données dans le cadre du RGPD (Règlement général sur la protection des données) selon les durées de conservation définies dans le registre des traitements.

J'en profite d'ailleurs pour faire une parenthèse au sujet du RGPD. Avec mon associé Alexis Gabry, nous éditons une solution RGPD pour accompagner les DPO. ProDPO offre une solution complète pour gérer les missions de DPO de manière simple et collaborative 😁

Database Anonymizer inclue une grande quantité de générateurs de données aléatoires. Il permet également de générer des données via des modèles écrits en Twig. Vous pouvez spécifier des règles précises pour chaque table ou bien des règles globales appliquées sur chacunes des tables de votre configuration.

Pour faire fonctionner le projet, il suffit de définir un fichier de configuration comme suit :

rules:
  columns:
    # Applique par défaut le faker "phone_e164number" sur les colonnes nommées "phone"
    phone: phone_e164number
  generators:
      # Applique par défaut le faker "person_name" sur les colonnes nommées "display_name"
    person_name: [display_name]
  actions:
    - table: user
      # Une colonne virtuelle permet de générer une données réutilisable dans l'édition d'une colonne
      virtual_columns:
        domain: internet_domain
      columns:
        # "person_firstname" et "person_lastname" sont des générateurs intégrés au projet
        firstname: person_firstname
        lastname: person_lastname
        # L'email est construit dynamiquement
        email: "{{ (firstname ~ '.' ~ lastname ~ '@' ~ domain)|lower }}"
    - table: company
      columns:
        name: company_name
    - table: access_log
      # On peut supprimer des données spécifiques à une table
      query: 'select * from access_log where date < (NOW() - INTERVAL 6 MONTH)'
      delete: true
    - table: user_ip
      # On peut sépcifier des clés primaires spécifiques, `[ìd]` étant la valeur par défaut
      primary_key: [user_id, ip_id]
      delete: true

Ensuite, il faut lancer database-anonymizer en spécifiant la chaine de connexion à la base de donnée et le chemin vers la configuration.

database-anonymizer --dsn "mysql://username:password@tcp(db_host)/db_name" --schema ./schema.yaml
database-anonymizer --dsn "postgres://username:password@db_host:5432/db_name" --schema ./schema.yaml

Vous trouverez la liste complète des générateurs sur la page Gitnet et vous pouvez bien sur télécharger la première version ici.

J'ai encore du travail à faire sur le projet mais il est en bonne voix ! Si vous désirez l'essayer et me faire des retours, j'en serai ravi ! 😀

Vus : 65
Publié par Simon Vieille : 141