asgard_restaure_editeurs_lecteurs
fonction qui recalcule les identifiants système des schémas et rôles référencés dans la table de gestion
z_asgard_admin.asgard_restaure_editeurs_lecteurs( [ nom_schema text DEFAULT NULL [, preserve boolean DEFAULT True [, autorise_public boolean DEFAULT True [, autorise_login boolean DEFAULT False [, autorise_superuser boolean DEFAULT False]]]]] )
La fonction asgard_restaure_editeurs_lecteurs
recalcule les champs lecteur
et editeur
de la table de gestion[1] en fonction des droits effectifs sur les objets de la base, en s'appuyant sur les fonctions asgard_cherche_lecteur
et asgard_cherche_editeur
.
Cette fonction n'a pas été pensée pour désigner des rôles comme éditeur ou lecteur des schémas. Pour cela, la seule méthode recommandée reste un UPDATE
sur la table de gestion, qui assure que les nouveaux lecteurs et éditeurs reçoivent les privilèges correspondant à leur fonction. À l'inverse, asgard_restaure_editeurs_lecteurs
fait en sorte de ne modifier en aucune façon les privilèges dont disposent déjà les rôles, aussi bien les nouveaux lecteurs et éditeurs qu'elle va renseigner dans la table de gestion que ceux dont, si l'argument preserve
vaut False
, elle pourrait effacer les noms de la table de gestion. Cette approche n'est pas anodine, car elle implique la désactivation temporaire d'une partie des mécanismes automatisés d'ASGARD. Elle tend aussi à faire persister silencieusement des écarts par rapport aux droits prévus pour les rôles lecteurs et éditeurs. Pour confirmer l'absence de telles divergences, ou au moins les identifier et vérifier qu'elles sont légitimes et maîtrisées, il est donc recommandé de scanner la base avec la fonction de diagnostic asgard_diagnostic
après toute application d'asgard_restaure_editeurs_lecteurs
.
Le fonction asgard_restaure_editeurs_lecteurs
est principalement pertinente dans deux cas :
Lors de la première activation d'ASGARD sur une base qui comporte un grand nombre de schémas, pour accélérer l'initialisation de la table de gestion sans immédiatement modifier les droits alloués. On pourra par exemple appliquer
asgard_initialisation_gestion_schema
pour référencer tous les schémas de la base, puisasgard_restaure_editeurs_lecteurs
pour tenter de déduire leurs éditeurs et lecteurs sans avoir à tout ressaisir manuellement, puisasgard_diagnostic
pour évaluer les écarts par rapport aux droits standard, quitte à appliquer ensuiteasgard_initialise_all_schemas
ouasgard_initialise_schema
pour supprimer les écarts non justifiés.Si le contenu de la table de gestion a été accidentellement perdu. Dès lors que les droits des éditeurs et lecteurs n'avaient pas fait l'objet d'une personnalisation[2] déviant fortement du standard,
asgard_restaure_editeurs_lecteurs
est un outil efficace pour restaurer le contenu des champsediteur
etlecteur
tout en préservant les ajustements manuels qui avaient pu être faits sur les privilèges.
Syntaxe avec des arguments positionnels⚓
SELECT z_asgard_admin.asgard_restaure_editeurs_lecteurs(['%nom_schema' [, %preserve [, %autorise_public [, %autorise_login [, %autorise_superuser ]]]]]) ;
Les arguments doivent être spécifiés dans l'ordre.
Syntaxe avec des arguments nommés⚓
SELECT z_asgard_admin.asgard_restaure_editeurs_lecteurs([nom_schema := '%nom_schema' [, preserve := %preserve [, autorise_public := %autorise_public [, autorise_login := %autorise_login [, autorise_superuser := %autorise_superuser ]]]]]) ;
L'ordre des arguments nommés n'a pas d'importance.
Il est bien entendu possible de commencer avec des arguments positionnels (dans l’ordre) et terminer par des arguments nommés.
Arguments⚓
[optionnel]
nom_schema
est une chaîne de caractères correspondant au nom d'un schéma dont on souhaite restaurer le lecteur et l'éditeur. Si cet argument est fourni, la fonction n'agit que sur l'enregistrement de la table de gestion correspondant à ce schéma, sinon elle recalcule les champslecteur
etediteur
pour tous les schémas actifs[4]. Les valeurs denom_schema
s’écrivent sans les guillemets doubles nécessaires aux identifiants des commandes SQL, même s’il s’agit de noms non normalisés. Par exemple, on veillera bien à indiquer 'c_Bibliothèque' et non '"c_Bibliothèque"'.[optionnel]
preserve
est un booléen. Par défaut, cet argument vautTrue
, ce qui signifie que la fonction ne doit pas supprimer ou remplacer les lecteurs et éditeurs déjà renseignés dans la table de gestion. Elle en ajoutera simplement là où il n'y en avait pas, dès lors que les fonctions de rechercheasgard_cherche_lecteur
etasgard_cherche_editeur
renvoient un résultat. Sipreserve
est explicitement renseigné avec la valeurFalse
, la fonction changera les noms des lecteurs et/ou éditeurs préalablement saisis quand les fonctions de recherche indiquent que d'autres rôles disposent de droits plus proches de ceux qui sont attendus. Elle pourra aussi supprimer des noms sans les remplacer lorsque les fonctions de recherche signalent qu'aucun rôle ne remplit les conditions minimales qu'elles fixent. Dans tous les cas, seules les valeurs des champs de la table de gestion sont modifiées, les privilèges des rôles sur les objets de la base ne sont pas affectés.
Les arguments optionnels autorise_public
, autorise_login
et autorise_superuser
sont passés en argument des fonctions de recherche asgard_cherche_lecteur
et asgard_cherche_editeur
à chaque appel de celles-ci par asgard_restaure_editeurs_lecteurs
. On se reportera aux descriptions de ces fonctions pour plus de détails.
Résultat⚓
« __ RESTAURATION DES LECTEURS ET EDITEURS REUSSIE. » si la requête s'est exécutée normalement.
Le détail des modifications réalisées apparaît dans l’onglet « Messages » de l’éditeur de requêtes de pgAdmin.
Exemple :
Pour restaurer les noms des lecteurs et éditeurs de tous les schémas actifs[4], sans modifier ceux qui sont déjà renseignés dans la table de gestion :
SELECT z_asgard_admin.asgard_restaure_editeurs_lecteurs() ;
Pour restaurer les noms des lecteurs et éditeurs de tous les schémas actifs, en autorisant le remplacement ou la suppression des noms qui apparaissent actuellement dans la table de gestion :
SELECT z_asgard_admin.asgard_restaure_editeurs_lecteurs(preserve := False) ;
Pour restaurer le nom du lecteur et de l'éditeur d'un unique schéma c_bibliotheque
, en autorisant ici la modification des valeurs déjà saisies et en excluant le pseudo-rôle public
de la recherche :
SELECT z_asgard_admin.asgard_restaure_editeurs_lecteurs(
nom_schema := 'c_bibliotheque',
preserve := False,
autorise_public := False
) ;
Pour restaurer les noms des lecteurs et éditeurs d'un ensemble de schémas, ici tous les schémas actifs du bloc[5] « e » des données externes (en préservant les valeurs déjà saisies) :
SELECT
z_asgard_admin.asgard_restaure_editeurs_lecteurs(
nom_schema := gestion_schema_usr.nom_schema
)
FROM z_asgard.gestion_schema_usr
WHERE gestion_schema_usr.bloc = 'e' ;