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, puis asgard_restaure_editeurs_lecteurs pour tenter de déduire leurs éditeurs et lecteurs sans avoir à tout ressaisir manuellement, puis asgard_diagnostic pour évaluer les écarts par rapport aux droits standard, quitte à appliquer ensuite asgard_initialise_all_schemas ou asgard_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 champs editeur et lecteur tout en préservant les ajustements manuels qui avaient pu être faits sur les privilèges.

Schéma

z_asgard_admin

Seuls g_admin[3] et ses membres sont habilités à utiliser cette fonction.

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

  1. [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 champs lecteur et editeur pour tous les schémas actifs[4]. Les valeurs de nom_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"'.

  2. [optionnel] preserve est un booléen. Par défaut, cet argument vaut True, 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 recherche asgard_cherche_lecteur et asgard_cherche_editeur renvoient un résultat. Si preserve est explicitement renseigné avec la valeur False, 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 :

1
2
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 :

1
2
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 :

1
2
SELECT z_asgard_admin.asgard_restaure_editeurs_lecteurs(
3
    nom_schema := 'c_bibliotheque', 
4
    preserve := False, 
5
    autorise_public := False
6
) ;

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) :

1
2
SELECT 
3
    z_asgard_admin.asgard_restaure_editeurs_lecteurs(
4
        nom_schema := gestion_schema_usr.nom_schema
5
    ) 
6
    FROM z_asgard.gestion_schema_usr
7
    WHERE gestion_schema_usr.bloc = 'e' ;