Skip to content
Snippets Groups Projects
Commit e15798da authored by Bertrand Gauthier's avatar Bertrand Gauthier
Browse files

Version de démo : améliorations

parent 871c5e00
Branches
No related tags found
No related merge requests found
......@@ -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
......
......@@ -144,6 +144,8 @@ return [
'except' => [
'id' => [
4974, // Bertrand
97521, // Nicolas
1183582, // Thomas
],
],
],
......@@ -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
],
],
],
......
----------------------------------------------------------------------------------------------------------
-- 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'
----------------------------------------------------------------------------------------------------------
-- 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'
;
......@@ -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"
......@@ -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"
......@@ -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"
......@@ -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 \
......@@ -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"
......
......@@ -2,3 +2,13 @@ README
======
Ressources Docker pour une base de données de **démo**.
Re-création de la bdd après un `drop owned by USER` :
```bash
/usr/bin/psql --file=./docker/demo/sql/02_other/02_dump.sql --username=USER --host=localhost --port=54321 --dbname=sygal_demo
```
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please to comment