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
etg_admin_ext
sur les objets des schémas d’ASGARD (critique). À noter que, comme tous les autres, les schémasz_asgard_admin
etz_asgard
ne 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ègeUSAGE
(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.
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 champid
de la tabletable_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 vautTrue
, il est recommandé de remédier immédiatement au problème, qui est susceptible d’affecter le fonctionnement d’ASGARD. Lorsqu’il vautFalse
, 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.
SELECT * FROM z_asgard_admin.asgard_diagnostic() ;
Exemple :
Exécution du diagnostic sur les seuls schémas c_bibliotheque
et c_librairie
.
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 :
asgard_initialise_obj
pour réinitialiser les droits sur un objet donné ;asgard_initialise_schema
pour réinitialiser les droits sur un schéma et les objets qu’il contient ;asgard_initialise_all_schemas
pour réinitialiser les droits sur tous les schémas référencés et les objets qu’ils contiennent.
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.