Commit e15798da authored by Bertrand Gauthier's avatar Bertrand Gauthier
Browse files

Version de démo : améliorations

parent 871c5e00
Loading
Loading
Loading
Loading
+8 −6
Original line number Diff line number Diff line
@@ -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
+10 −4
Original line number Diff line number Diff line
@@ -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
                    ],
                ],
            ],
+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'
+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'
;
+26 −5
Original line number Diff line number Diff line
@@ -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"
Loading