Loading bin/demo/README.md +8 −6 Original line number Diff line number Diff line Loading @@ -9,14 +9,16 @@ démo à partir d'une bdd modèle à laquelle on doit pouvoir se connecter. Les étapes de ce script sont les suivantes : - Dump SQL de la bdd modèle (pg_dump). - Lancement d'une bdd SyGAL temporaire (à partir de l'image Docker 'sygal-db-image'). - Exécution des scripts SQL de peuplement de la bdd SyGAL temporaire : import du dump puis élagage des données. - Génération du script SQL d'anonymisation des données de la bdd SyGAL temporaire (ligne de commande de SyGAL). - Anonymisation de la bdd SyGAL temporaire. - Dump SQL de la bdd SyGAL anonymisée (pg_dump). - Lancement d'une bdd temporaire (à partir de l'image Docker 'sygal-db-image'). - Exécution du script SQL de peuplement de la bdd temporaire (import du dump SQL) - Lancement de la procédure d'élagage des données en bdd temporaire. - Génération du script SQL d'anonymisation des données de la bdd temporaire (ligne de commande de SyGAL). - Lancement du script SQL d'anonymisations complémentaires de la bdd temporaire. - Lancement du script SQL de préparations diverses de la bdd temporaire. - Dump SQL de la bdd temporaire (pg_dump). - Copie du dump SQL dans le répertoire cible. **Attention, l'exécution de ce script peut durer jusqu'à 20 minutes.** **NB : l'exécution de ce script peut durer jusqu'à 20 minutes.** Utilisation Loading bin/demo/src/app/zzz.unicaen-db-anonym.local.php +10 −4 Original line number Diff line number Diff line Loading @@ -144,6 +144,8 @@ return [ 'except' => [ 'id' => [ 4974, // Bertrand 97521, // Nicolas 1183582, // Thomas ], ], ], Loading Loading @@ -230,14 +232,18 @@ return [ 'mapping' => [ 'username' => ['name' => 'numerify', 'unique' => true, 'params' => ['user########']], 'email' => 'safeEmail', // 'displayName' => 'name', // 'nom' => 'lastName', // 'prenom' => 'firstName', 'displayName' => 'name', 'nom' => 'lastName', 'prenom' => 'firstName', ], 'except' => [ 'username' => [ 'sygal-app', 'gauthierb@unicaen.fr', ], 'id' => [ 1442, // Bertrand 7608, // Nicolas 143423, // Thomas ], ], ], Loading bin/demo/src/db/05_post_anonym.sql +13 −22 Original line number Diff line number Diff line ---------------------------------------------------------------------------------------------------------- -- Traitements post-anonymisation. -- Traitements complémentaires pour anonymisation. ---------------------------------------------------------------------------------------------------------- -- email : {username}@... -- -- transformation des emails : {username}@... -- update utilisateur u set email = u.username || substr(u.email, position('@' in u.email)) from individu i where u.individu_id = i.id ; -- nom, prenom, display_name : cohérents avec l'individu lié -- -- transformation des nom, prenom, display_name pour être cohérent avec l'individu lié éventuel -- update utilisateur u set nom = i.nom_usuel, prenom = i.prenom1, display_name = i.prenom1 || ' ' || i.nom_usuel set nom = i.nom_usuel, prenom = i.prenom1, display_name = i.prenom1 || ' ' || i.nom_usuel from individu i where u.individu_id = i.id ; -- -- anonymisation du npd dans les tables substit_* (non gérables par unicaen/db-anonym car sans entité Doctrine associée) -- update substit_doctorant set npd = md5(random()::varchar); update substit_ecole_doct set npd = md5(random()::varchar); update substit_etablissement set npd = md5(random()::varchar); update substit_individu set npd = md5(random()::varchar); update substit_structure set npd = md5(random()::varchar); update substit_unite_rech set npd = md5(random()::varchar); update substit_unite_rech set npd = md5(random()::varchar); -- données inutiles delete from substit_fk_replacement; -- interdiction de lancer import et synchro delete from profil_privilege where privilege_id = ( select p.id from privilege p join categorie_privilege cp on p.categorie_id = cp.id and cp.code = 'unicaen-db-import' where p.code = 'import-lancer' ); delete from role_privilege where privilege_id = ( select p.id from privilege p join categorie_privilege cp on p.categorie_id = cp.id and cp.code = 'unicaen-db-import' where p.code = 'import-lancer' bin/demo/src/db/06_prepare.sql 0 → 100644 +82 −0 Original line number Diff line number Diff line ---------------------------------------------------------------------------------------------------------- -- Remaniement de données, et données de test. ---------------------------------------------------------------------------------------------------------- -- -- suppression de données inutiles -- delete from substit_fk_replacement; -- -- retraits de privilèges pour interdire de lancer import et synchro -- delete from profil_privilege where privilege_id = ( select p.id from privilege p join categorie_privilege cp on p.categorie_id = cp.id and cp.code = 'unicaen-db-import' where p.code = 'import-lancer' ); delete from role_privilege where privilege_id = ( select p.id from privilege p join categorie_privilege cp on p.categorie_id = cp.id and cp.code = 'unicaen-db-import' where p.code = 'import-lancer' ); -- -- re-création si nécessaire de l'établissement "inconnu". -- insert into structure(id, libelle, type_structure_id, histo_createur_id, histo_modificateur_id, source_id, source_code, code) select nextval('structure_id_seq'), 'Établissement inconnu', 1, -- type etab 1, 1, 1, -- source sygal 'ETAB_INCONNU', -- source code unique 'INCONNU' -- code on conflict do nothing; insert into etablissement(id, structure_id, histo_createur_id, histo_modificateur_id, source_id, source_code) select nextval('etablissement_id_seq'), currval('structure_id_seq'), 1, 1, 1, -- source sygal 'ETAB_INCONNU' -- source code unique, idem structure on conflict do nothing; -- -- création de l'individu et du compte utilisateur LOCAL de test -- insert into individu (id, nom_usuel, nom_patronymique, prenom1, email, source_code, supann_id, source_id, histo_createur_id) select nextval('individu_id_seq'), $$Premier$$, $$Premier$$, $$François$$, 'francois.premier@unicaen.fr', 'UCN::00012345', '00012345', 1, 1; insert into utilisateur (id, individu_id, username, email, display_name, password, password_reset_token, nom, prenom) select nextval('utilisateur_id_seq'), i.id, 'francois.premier@unicaen.fr', -- email, i.e. compte local 'francois.premier@unicaen.fr', $$François Premier$$, '(Cf. ci-dessous pour choisir le mdp)', -- mdp bcrypté car compte local 'sdfkjhWwGkhgoGHLJKgSvPBWnlCtHWIgb8GLH3iGkgKfHJmKwrKSHoGqDjHTa6T9a8', $$Premier$$, $$François$$ from individu i where i.source_code = 'UCN::00012345'; -- NB : pour choisir le mot de passe de ce compte, aller à l'adresse -- /utilisateur/init-compte/sdfkjhWwGkhgoGHLJKgSvPBWnlCtHWIgb8GLH3iGkgKfHJmKwrKSHoGqDjHTa6T9a8 -- -- /!\ Attribution du rôle Admin tech à l'individu/utilisateur de test !! -- insert into individu_role(id, individu_id, role_id) select nextval('individu_role_id_seq'), i.id, r.id from individu i, role r where i.source_code = 'UCN::00012345' and r.source_code = 'ADMIN_TECH' ; bin/demo/update_demo.sh +26 −5 Original line number Diff line number Diff line Loading @@ -17,7 +17,7 @@ ROOT_DIR=${THIS_DIR} TARGET_DIR=$(realpath "${ROOT_DIR}/../../docker/demo") SYGAL_BRANCH="release_8.4.0" SYGAL_BRANCH="master" SYGAL_DB="sygal" SYGAL_USER="ad_sygal" Loading Loading @@ -200,7 +200,7 @@ echo "Fait." echo "--------------------------------------------------------------------------------------------------------" # # Build et run SyGAL pour générer le script d'anonymisation sur la base temporaire élaguée.. # Build et run SyGAL pour générer le script d'anonymisation sur la base temporaire élaguée. # SQL_OUTPUT_FILE_NAME="09_anonymisation.sql" SQL_OUTPUT_FILE_PATH="$SQL_OUTPUT_DIR/$SQL_OUTPUT_FILE_NAME" Loading @@ -212,7 +212,8 @@ if [ ! -f "$SQL_OUTPUT_FILE_PATH" ]; then git clone git@git.unicaen.fr:open-source/sygal fi [[ $? -ne 0 ]] && exit 1 cd $GIT_DIR && git checkout $SYGAL_BRANCH && git pull && \ cd $GIT_DIR && git checkout $SYGAL_BRANCH && git pull [[ $? -ne 0 ]] && exit 1 docker build --build-arg PHP_VERSION=8.0 -t sygal-image-tmp . && \ echo "Attente que la bdd temporaire soit prête..." && \ timeout 120s bash -c "until docker exec $DB_CONTAINER_NAME pg_isready --host=localhost ; do sleep 5 ; done" Loading Loading @@ -248,7 +249,7 @@ fi echo "--------------------------------------------------------------------------------------------------------" # # Exécution du script d'anonymisation. # Exécution du script d'anonymisation généré sur la bdd temporaire. # echo "# Exécution du script d'anonymisation sur la bdd temporaire $SYGAL_USER/$SYGAL_DB... " docker exec \ Loading Loading @@ -280,11 +281,31 @@ echo "# Exécution du script post-anonymisation de la bdd temporaire $SYGAL_USER # echo "Inutile, des données persistées existent déjà dans $TMP_DIR/docker/db." #fi echo "--------------------------------------------------------------------------------------------------------" SQL_PREPARE_FILE_NAME="06_prepare.sql" # # Exécution du script de préparation de la bdd temporaire. # echo "# Exécution du script de preparation de la bdd temporaire $SYGAL_USER/$SYGAL_DB..." #if [ ! -d "$TMP_DIR/docker/db" ]; then echo " - Lancement de $SQL_PREPARE_FILE_NAME..." && \ docker exec \ --env PGDATABASE=$SYGAL_DB \ --env PGUSER=$SYGAL_USER \ $DB_CONTAINER_NAME \ psql -o /dev/null --quiet -v ON_ERROR_STOP=1 -f /tmp/sql/$SQL_PREPARE_FILE_NAME && \ echo "Fait." [[ $? -ne 0 ]] && exit 1 #else # echo "Inutile, des données persistées existent déjà dans $TMP_DIR/docker/db." #fi echo "--------------------------------------------------------------------------------------------------------" # # Dump SQL de la bdd anonymisée. # Dump SQL de la bdd temporaire. # SQL_OUTPUT_DIR="$TMP_DIR/sql" SQL_DUMP_FILE_PATH="$SQL_OUTPUT_DIR/02_dump.sql" Loading Loading
bin/demo/README.md +8 −6 Original line number Diff line number Diff line Loading @@ -9,14 +9,16 @@ démo à partir d'une bdd modèle à laquelle on doit pouvoir se connecter. Les étapes de ce script sont les suivantes : - Dump SQL de la bdd modèle (pg_dump). - Lancement d'une bdd SyGAL temporaire (à partir de l'image Docker 'sygal-db-image'). - Exécution des scripts SQL de peuplement de la bdd SyGAL temporaire : import du dump puis élagage des données. - Génération du script SQL d'anonymisation des données de la bdd SyGAL temporaire (ligne de commande de SyGAL). - Anonymisation de la bdd SyGAL temporaire. - Dump SQL de la bdd SyGAL anonymisée (pg_dump). - Lancement d'une bdd temporaire (à partir de l'image Docker 'sygal-db-image'). - Exécution du script SQL de peuplement de la bdd temporaire (import du dump SQL) - Lancement de la procédure d'élagage des données en bdd temporaire. - Génération du script SQL d'anonymisation des données de la bdd temporaire (ligne de commande de SyGAL). - Lancement du script SQL d'anonymisations complémentaires de la bdd temporaire. - Lancement du script SQL de préparations diverses de la bdd temporaire. - Dump SQL de la bdd temporaire (pg_dump). - Copie du dump SQL dans le répertoire cible. **Attention, l'exécution de ce script peut durer jusqu'à 20 minutes.** **NB : l'exécution de ce script peut durer jusqu'à 20 minutes.** Utilisation Loading
bin/demo/src/app/zzz.unicaen-db-anonym.local.php +10 −4 Original line number Diff line number Diff line Loading @@ -144,6 +144,8 @@ return [ 'except' => [ 'id' => [ 4974, // Bertrand 97521, // Nicolas 1183582, // Thomas ], ], ], Loading Loading @@ -230,14 +232,18 @@ return [ 'mapping' => [ 'username' => ['name' => 'numerify', 'unique' => true, 'params' => ['user########']], 'email' => 'safeEmail', // 'displayName' => 'name', // 'nom' => 'lastName', // 'prenom' => 'firstName', 'displayName' => 'name', 'nom' => 'lastName', 'prenom' => 'firstName', ], 'except' => [ 'username' => [ 'sygal-app', 'gauthierb@unicaen.fr', ], 'id' => [ 1442, // Bertrand 7608, // Nicolas 143423, // Thomas ], ], ], Loading
bin/demo/src/db/05_post_anonym.sql +13 −22 Original line number Diff line number Diff line ---------------------------------------------------------------------------------------------------------- -- Traitements post-anonymisation. -- Traitements complémentaires pour anonymisation. ---------------------------------------------------------------------------------------------------------- -- email : {username}@... -- -- transformation des emails : {username}@... -- update utilisateur u set email = u.username || substr(u.email, position('@' in u.email)) from individu i where u.individu_id = i.id ; -- nom, prenom, display_name : cohérents avec l'individu lié -- -- transformation des nom, prenom, display_name pour être cohérent avec l'individu lié éventuel -- update utilisateur u set nom = i.nom_usuel, prenom = i.prenom1, display_name = i.prenom1 || ' ' || i.nom_usuel set nom = i.nom_usuel, prenom = i.prenom1, display_name = i.prenom1 || ' ' || i.nom_usuel from individu i where u.individu_id = i.id ; -- -- anonymisation du npd dans les tables substit_* (non gérables par unicaen/db-anonym car sans entité Doctrine associée) -- update substit_doctorant set npd = md5(random()::varchar); update substit_ecole_doct set npd = md5(random()::varchar); update substit_etablissement set npd = md5(random()::varchar); update substit_individu set npd = md5(random()::varchar); update substit_structure set npd = md5(random()::varchar); update substit_unite_rech set npd = md5(random()::varchar); update substit_unite_rech set npd = md5(random()::varchar); -- données inutiles delete from substit_fk_replacement; -- interdiction de lancer import et synchro delete from profil_privilege where privilege_id = ( select p.id from privilege p join categorie_privilege cp on p.categorie_id = cp.id and cp.code = 'unicaen-db-import' where p.code = 'import-lancer' ); delete from role_privilege where privilege_id = ( select p.id from privilege p join categorie_privilege cp on p.categorie_id = cp.id and cp.code = 'unicaen-db-import' where p.code = 'import-lancer'
bin/demo/src/db/06_prepare.sql 0 → 100644 +82 −0 Original line number Diff line number Diff line ---------------------------------------------------------------------------------------------------------- -- Remaniement de données, et données de test. ---------------------------------------------------------------------------------------------------------- -- -- suppression de données inutiles -- delete from substit_fk_replacement; -- -- retraits de privilèges pour interdire de lancer import et synchro -- delete from profil_privilege where privilege_id = ( select p.id from privilege p join categorie_privilege cp on p.categorie_id = cp.id and cp.code = 'unicaen-db-import' where p.code = 'import-lancer' ); delete from role_privilege where privilege_id = ( select p.id from privilege p join categorie_privilege cp on p.categorie_id = cp.id and cp.code = 'unicaen-db-import' where p.code = 'import-lancer' ); -- -- re-création si nécessaire de l'établissement "inconnu". -- insert into structure(id, libelle, type_structure_id, histo_createur_id, histo_modificateur_id, source_id, source_code, code) select nextval('structure_id_seq'), 'Établissement inconnu', 1, -- type etab 1, 1, 1, -- source sygal 'ETAB_INCONNU', -- source code unique 'INCONNU' -- code on conflict do nothing; insert into etablissement(id, structure_id, histo_createur_id, histo_modificateur_id, source_id, source_code) select nextval('etablissement_id_seq'), currval('structure_id_seq'), 1, 1, 1, -- source sygal 'ETAB_INCONNU' -- source code unique, idem structure on conflict do nothing; -- -- création de l'individu et du compte utilisateur LOCAL de test -- insert into individu (id, nom_usuel, nom_patronymique, prenom1, email, source_code, supann_id, source_id, histo_createur_id) select nextval('individu_id_seq'), $$Premier$$, $$Premier$$, $$François$$, 'francois.premier@unicaen.fr', 'UCN::00012345', '00012345', 1, 1; insert into utilisateur (id, individu_id, username, email, display_name, password, password_reset_token, nom, prenom) select nextval('utilisateur_id_seq'), i.id, 'francois.premier@unicaen.fr', -- email, i.e. compte local 'francois.premier@unicaen.fr', $$François Premier$$, '(Cf. ci-dessous pour choisir le mdp)', -- mdp bcrypté car compte local 'sdfkjhWwGkhgoGHLJKgSvPBWnlCtHWIgb8GLH3iGkgKfHJmKwrKSHoGqDjHTa6T9a8', $$Premier$$, $$François$$ from individu i where i.source_code = 'UCN::00012345'; -- NB : pour choisir le mot de passe de ce compte, aller à l'adresse -- /utilisateur/init-compte/sdfkjhWwGkhgoGHLJKgSvPBWnlCtHWIgb8GLH3iGkgKfHJmKwrKSHoGqDjHTa6T9a8 -- -- /!\ Attribution du rôle Admin tech à l'individu/utilisateur de test !! -- insert into individu_role(id, individu_id, role_id) select nextval('individu_role_id_seq'), i.id, r.id from individu i, role r where i.source_code = 'UCN::00012345' and r.source_code = 'ADMIN_TECH' ;
bin/demo/update_demo.sh +26 −5 Original line number Diff line number Diff line Loading @@ -17,7 +17,7 @@ ROOT_DIR=${THIS_DIR} TARGET_DIR=$(realpath "${ROOT_DIR}/../../docker/demo") SYGAL_BRANCH="release_8.4.0" SYGAL_BRANCH="master" SYGAL_DB="sygal" SYGAL_USER="ad_sygal" Loading Loading @@ -200,7 +200,7 @@ echo "Fait." echo "--------------------------------------------------------------------------------------------------------" # # Build et run SyGAL pour générer le script d'anonymisation sur la base temporaire élaguée.. # Build et run SyGAL pour générer le script d'anonymisation sur la base temporaire élaguée. # SQL_OUTPUT_FILE_NAME="09_anonymisation.sql" SQL_OUTPUT_FILE_PATH="$SQL_OUTPUT_DIR/$SQL_OUTPUT_FILE_NAME" Loading @@ -212,7 +212,8 @@ if [ ! -f "$SQL_OUTPUT_FILE_PATH" ]; then git clone git@git.unicaen.fr:open-source/sygal fi [[ $? -ne 0 ]] && exit 1 cd $GIT_DIR && git checkout $SYGAL_BRANCH && git pull && \ cd $GIT_DIR && git checkout $SYGAL_BRANCH && git pull [[ $? -ne 0 ]] && exit 1 docker build --build-arg PHP_VERSION=8.0 -t sygal-image-tmp . && \ echo "Attente que la bdd temporaire soit prête..." && \ timeout 120s bash -c "until docker exec $DB_CONTAINER_NAME pg_isready --host=localhost ; do sleep 5 ; done" Loading Loading @@ -248,7 +249,7 @@ fi echo "--------------------------------------------------------------------------------------------------------" # # Exécution du script d'anonymisation. # Exécution du script d'anonymisation généré sur la bdd temporaire. # echo "# Exécution du script d'anonymisation sur la bdd temporaire $SYGAL_USER/$SYGAL_DB... " docker exec \ Loading Loading @@ -280,11 +281,31 @@ echo "# Exécution du script post-anonymisation de la bdd temporaire $SYGAL_USER # echo "Inutile, des données persistées existent déjà dans $TMP_DIR/docker/db." #fi echo "--------------------------------------------------------------------------------------------------------" SQL_PREPARE_FILE_NAME="06_prepare.sql" # # Exécution du script de préparation de la bdd temporaire. # echo "# Exécution du script de preparation de la bdd temporaire $SYGAL_USER/$SYGAL_DB..." #if [ ! -d "$TMP_DIR/docker/db" ]; then echo " - Lancement de $SQL_PREPARE_FILE_NAME..." && \ docker exec \ --env PGDATABASE=$SYGAL_DB \ --env PGUSER=$SYGAL_USER \ $DB_CONTAINER_NAME \ psql -o /dev/null --quiet -v ON_ERROR_STOP=1 -f /tmp/sql/$SQL_PREPARE_FILE_NAME && \ echo "Fait." [[ $? -ne 0 ]] && exit 1 #else # echo "Inutile, des données persistées existent déjà dans $TMP_DIR/docker/db." #fi echo "--------------------------------------------------------------------------------------------------------" # # Dump SQL de la bdd anonymisée. # Dump SQL de la bdd temporaire. # SQL_OUTPUT_DIR="$TMP_DIR/sql" SQL_DUMP_FILE_PATH="$SQL_OUTPUT_DIR/02_dump.sql" Loading