diff --git a/README.md b/README.md index 4a07f56219b858f78ece21f4ff53334b18354de3..27bfb6e7da7a2c00f7bc48b1fbc873db988ed5d0 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,98 @@ -# unicaen/db-anonym +Module `unicaen/db-anonym` +========================== -Ce module permet d'anonymiser et de restaurer la base de données d'une appli, selon ce qui est spécifié -dans un fichier de configuration. +Principe +-------- -Ce module utilise le module Faker : https://github.com/FakerPHP/Faker. +Ce module permet d'anonymiser les données de la bdd principale sur laquelle pointe une appli. Il permet aussi de +restaurer les données initiales (même si dans la plupart des cas d'usage l'anonymisation sera faite de façon définitive +lors de la préparation d'une bdd de démo par exemple). + +Les données fictives utilisées pour anonymiser sont générées à l'aide de [FakerPHP](https://github.com/FakerPHP/Faker). + +Les tables et colonnes concernées sont spécifiées dans un fichier de config, en terme de classe d'entité et de champs +Doctrine. Cf. [exemple de config](./config/unicaen-db-anonym.local.php.dist). + +Il est possibles d'écarter de l'anonymisation/restauration certains enregistrements selon la valeur d'un champ +(cf. clés de config `'except'`). + + +Préalables +---------- + +- Une table `_METADATA` munie d'un témoin d'anonymisation est utilisée pour enregistrer le fait que la bdd a été anonymisée +ou non. *Cela empêche qu'un script de restauration ne soit généré à partir d'une bdd anonymisée, auquel cas on ne pourrait +pas restaurer les données d'origine !* +Le script de création de cette table dans une bdd Postgres est fourni [ici](./sql/schema.postgres.sql). + + +Actions disponibles +------------------- + +### Génération des scripts d'anonymisation/restauration + +Le module génére 2 scripts SQL : +- 1 script d'*anonymisation* des données (clé de config `['output']['anonymisation']`) ; +- 1 script de *restauration* des données originales (clé de config `['output']['restauration']`). + +L'idée est de parcourir tous les enregistrements de chaque entité/table (sauf ceux écartés d'après la config) pour +générer d'une part un `update ... where id = ...` d'anonymisation inscrit dans le script d'anonymisation +et d'autre part un `update ... where id = ...` de restauration inscrit dans le script de restauration. + +Aperçu d'un script d'anonymisation : +```sql +update DOCTORANT set INE = '646f9de9fcca4a99bab2690608082e4b' where id = 48868 ; +update DOCTORANT set INE = '3a183d8d7279e1a96b9d28ef946f954a' where id = 48910 ; +update DOCTORANT set INE = '97e795820dc7ad554861f4506560bd6c' where id = 48892 ; +update DOCTORANT set INE = '4099c33d8adbde2cfbc8935f37daecf1' where id = 30070 ; +update DOCTORANT set INE = '969deb1e7289759e3003c45cea027a42' where id = 30071 ; +update DOCTORANT set INE = 'd6026025bcbff07930ffb98e349a4672' where id = 30073 ; +``` + +Aperçu du script de restauration associé : +```sql +update DOCTORANT set INE = '0BLTV200U26' where id = 48868 ; +update DOCTORANT set INE = '086OO5006D1' where id = 48910 ; +update DOCTORANT set INE = '03140E00MA4' where id = 48892 ; +update DOCTORANT set INE = '03140E00MZ9' where id = 30070 ; +update DOCTORANT set INE = '03140E00N22' where id = 30071 ; +update DOCTORANT set INE = '03140E00N33' where id = 30073 ; +``` + +```bash +php public/index.php unicaen-db-anonym generer +``` + +### Lancement de l'anonymisation + +Si le script d'anonymisation **et** celui de restauration ont été générés, le module est en mesure d'exécuter le script +d'anonymisation. + +```bash +php public/index.php unicaen-db-anonym anonymiser +``` + +À l'issue de l'anonymisation, le témoin d'anonymisation est mis à '1' dans la table `_METADATA`, ce qui empêchera de +lancer inutilement une nouvelle anonymisation mais surtout de regénérer un script de restauration à partir de la bdd +anonymisée. + +### Lancement de la restauration + +Si le script d'anonymisation **et** celui de restauration ont été générés, le module est en mesure d'exécuter le script +de restauration. + +```bash +php public/index.php unicaen-db-anonym anonymiser +``` + +À l'issue de la restauration, le témoin d'anonymisation est mis à '0' dans la table `_METADATA`, ce qui empêchera de +lancer inutilement une nouvelle restauration. + + +Remarques importantes +--------------------- + +- Les scripts d'anonymisation/restauration ne visent que les enregistrements qui existaient dans la bdd cible au moment +de leur génération. Si les données de cette bdd évoluent dans le temps (par exemple à l'issue d'un import de données +périodique ou au fil de l'utilisation de l'appli pointant sur cette bdd), ces scripts n'impacteront pas les nouveaux +enregistrements apparus (au mieux) ou planteront sur les enregistrements disparus (au pire).