asgard_diagnostic

fonction de recherche d'anomalies dans les droits alloués

z_asgard_admin.asgard_diagnostic( [ cibles text[] DEFAULT NULL::text[] ] )

asgard_diagnostic permet de contrôler rapidement que tout est en ordre concernant les droits sur les schémas référencés[1] par ASGARD et leur contenu.

Elle renvoie à l’utilisateur une liste d’« anomalies », c’est-à-dire de points sur lesquels les droits effectifs s’écartent du standard d’ASGARD. Ces anomalies peuvent correspondre à des personnalisations de droits[2] sciemment réalisées par l’administrateur et ne sont donc pas nécessairement problématiques. D'autres peuvent toutefois causer des dysfonctionnements importants si elles ne sont pas corrigées au plus tôt. La fonction qualifie la gravité des anomalies grâce à un attribut, critique, évoqué ci-après.

Concrètement, la fonction asgard_diagnostic considère comme des anomalies :

  • les droits manquants pour les rôles g_consult et g_admin_ext sur les objets des schémas d’ASGARD (critique). À noter que, comme tous les autres, les schémas z_asgard_admin et z_asgardne sont pris en compte par la fonction de diagnostic que s'ils ont été préalablement référencés ;

  • les objets dont le propriétaire n’est pas le producteur[3] identifié pour leur schéma (critique) ;

  • les privilèges manquants du propriétaire/producteur, de l’éditeur[4] et du lecteur[5] au regard des droits prévus par ASGARD pour chacun d’eux (non critique) ;

  • les privilèges alloués à d’autres rôles que les propriétaire/producteur, éditeur et lecteur, ou conférés à ces derniers mais outrepassant les droits normaux (non critique) ;

  • les fonctions sur lesquelles le pseudo-rôle public n’a pas le privilège EXECUTE et les types sur lesquels il n’a pas le privilège USAGE (droits accordés automatiquement par PostgreSQL et qu’ASGARD ne remet pas en cause, non critique) ;

  • tous les privilèges par défaut, leur usage n’étant pas prévu par ASGARD (non critique) ;

  • les privilèges accordés WITH GRANT OPTION, là aussi parce que cette pratique n’est pas conseillée dans le contexte d'ASGARD (non critique) ;

  • les droits manquants du producteur du schéma d’une vue ou vue matérialisée sur les tables ou vues sources (non critique).

Sans argument, la fonction asgard_diagnostic balaie l’ensemble des schémas référencés. Elle peut avoir un temps d’exécution conséquent sur les bases qui comportent un grand nombre de schémas et/ou d’objets, de l’ordre de plusieurs minutes.

Optionnellement, il est possible de restreindre sa portée à une liste de schémas spécifiée en argument.

Schéma

z_asgard_admin

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

Syntaxe

La syntaxe d’asgard_diagnostic est légèrement différente de celle des autres fonctions, dans la mesure où son résultat est une table avec plusieurs attributs :

SELECT { * | expression [, ...] } FROM z_asgard_admin.asgard_diagnostic( [ %cibles ] ) ;

expression est un appel aux attributs du résultat de la fonction, sinon * pour tous les attributs.

Ou, en nommant l’argument :

SELECT { * | expression [, ...] } FROM z_asgard_admin.asgard_diagnostic( [ cibles := %cibles ] ) ;

L’argument, optionnel, peut être omis.

Argument

[optionnel] cibles est un tableau de chaînes de caractères (text[]) contenant une liste de noms de schémas référencés. Si cibles est renseigné, le diagnostic sera restreint aux schémas spécifiés. S’il est absent, le diagnostic portera sur l’ensemble des schémas référencés. Si l’un des noms de la liste n’est pas un schéma actif[7] référencé, la fonction renverra une erreur.

Résultat

Une table avec autant d’enregistrements que d’anomalies identifiées et cinq attributs :

  • nom_schema est le nom du schéma concerné.

  • nom_objet est le nom de l’objet concerné. NULL pour un privilège par défaut. Pour un attribut, nom_objet est formé du nom de la table ou assimilé, suivi du nom de l’attribut entre parenthèses – par exemple, « table_a (id) » pour le champ id de la table table_a.

  • typ_objet est le type d’objet concerné (écrit en français sous une forme lisible non standardisée).

  • critique est un booléen qui qualifie la gravité de l’anomalie constatée. Lorsqu’il vaut True, il est recommandé de remédier immédiatement au problème, qui est susceptible d’affecter le fonctionnement d’ASGARD. Lorsqu’il vaut False, l’anomalie met simplement en évidence une répartition des droits qui n’est pas celle qu’ASGARD met en œuvre par défaut. Il revient alors à l’administrateur d’évaluer la légitimité de cette personnalisation.

  • anomalie est la description de l’anomalie.

Si aucune anomalie n'a été détectée, la fonction ne renvoie rien.

Exemple

Exécution du diagnostic sur tous les schémas référencés.

1
2
SELECT * FROM z_asgard_admin.asgard_diagnostic() ;

Exemple

Exécution du diagnostic sur les seuls schémas c_bibliotheque et c_librairie.

1
2
SELECT * FROM z_asgard_admin.asgard_diagnostic(ARRAY['c_bibliotheque', 'c_librairie']) ;

Truc & astuce

Les anomalies peuvent être corrigées par des commandes SQL standard (par exemple GRANT) ou à l’aide des fonctions de réinitialisation des droits d’ASGARD :

Les fonctions ci-avant pourront remédier à toutes les catégories d’anomalies identifiées par asgard_diagnostic sauf :

  • les privilèges manquants du pseudo-rôle public sur les fonctions et les types, volontairement exclus du champ des mécanismes automatisés d’ASGARD et qui, s’il y a lieu, devront être rétablis par des commandes GRANT manuelles ;

  • le cas du producteur du schéma d’une vue ou vue matérialisée qui ne serait pas a minima lecteur pour tous les schémas contenant les données sources de la vue. Il est de la responsabilité de l’administrateur de déterminer quels sont les droits adaptés à donner dans cette situation. Cf. Cas particulier des vues et vues matérialisées pour plus de détails sur les privilèges requis selon les cas.

asgard_diagnostic se veut par ailleurs exhaustive. À l’exception des types générés automatiquement par PostgreSQL (pour lesquels ni les privilèges ni le propriétaire ne peuvent être modifiés par les utilisateurs), elle considère tous les objets rattachés à des schémas.