asgard_initialise_all_schemas
fonction de réinitialisation des droits selon le standard d'ASGARD (cible = tous les schémas référencés)
z_asgard_admin.asgard_initialise_all_schemas( [ variante integer DEFAULT 0 ] )
asgard_initialise_all_schemas
est une fonction de premiers secours. Selon la variante utilisée, elle permet :
de réinitialiser les droits sur tous les schémas référencés en une seule commande. En substance, il s’agit d’une application massive d’
asgard_initialise_schema
;de vérifier la cohérence des propriétaires des objets avec ceux des schémas (référencés[1]) qui les contiennent. Cette fonctionnalité devra notamment être mise à profit en cas de désactivation malencontreuse des déclencheurs sur événements d’ASGARD ;
de remettre à plat propriétaires et privilèges sur les schémas d'ASGARD – par exemple en cas de modification accidentelle des droits. L’effet est alors presque identique à l’application de la fonction
asgard_initialise_schema
surz_asgard
etz_asgard_admin
, si ce qu’asgard_initialise_all_schemas
saura corriger la perte du privilègeSELECT
deg_admin_ext
surgestion_schema
, au contraire deasgard_initialise_schema
.
Il peut être nécessaire d’exécuter la fonction avec un rôle super-utilisateur[2] si certains schémas référencés (ou objets qui s’y trouvent) appartiennent à des super-utilisateurs.
Contrairement à la plupart des fonctions d’ASGARD, asgard_initialise_all_schemas
ne retourne pas d’erreur si elle n’est pas en mesure de traiter un schéma. Elle poursuit sur les autres et informe simplement l’utilisateur du problème rencontré.
Syntaxe⚓
SELECT z_asgard_admin
.asgard_initialise_all_schemas ( [ %variante ] ) ;
Ou, en nommant l’argument :
SELECT z_asgard_admin.asgard_initialise_all_schemas ( [ variante := %variante ] ) ;
L’argument, optionnel, peut être omis.
Tout particulièrement dans sa variante 0, et dans une moindre mesure pour la variante 1, la fonction asgard_initialise_all_schemas
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 voire dizaines de minutes.
Pour améliorer la performance, il est recommandé d’exécuter simultanément une commande SET
qui bloque temporairement l’émission des messages par lesquels ASGARD rend compte de toutes les opérations réalisées.
SET LOCAL client_min_messages = 'ERROR' ; SELECT z_asgard_admin.asgard_initialise_all_schemas( [ %variante ] ) ;
Argument⚓
[optionnel] variante
est un entier compris entre 0 et 2 indiquant la variante à utiliser (cf. ci-après). 0 par défaut.
Résultat⚓
NULL
si la requête s’est exécutée normalement, sinon la liste des schémas qui n’ont pas pu être traités. Se reporter dans ce cas à l’onglet Messages
pour le détail des erreurs.
Plus généralement, des messages informent l’utilisateur de toutes les opérations réalisées.
Variantes⚓
0 | La fonction s’applique à tous les schémas référencés + |
---|---|
1 | La fonction s’applique à tous les schémas référencés + |
2 | La fonction s’applique exclusivement sur les schémas Elle contrôle les propriétaires, efface les modifications manuelles des droits et rétablit les privilèges nécessaires au bon fonctionnement d’ASGARD. Le cas échéant, elle applique les privilèges standards de l’éditeur et du lecteur déclarés dans la table de gestion. |
Exemple :
Nettoyage complet des droits après l’initialisation sur une base existante.
SELECT z_asgard_admin.asgard_initialise_all_schemas() ;
Cette commande équivaut à :
SELECT z_asgard_admin.asgard_initialise_all_schemas(0) ;
Exemple :
Restauration des droits sur z_asgard_admin
après une suppression manuelle malencontreuse des privilèges (absolument essentiels) de g_admin_ext
.
SELECT z_asgard_admin.asgard_initialise_all_schemas(2) ;
NOTICE: (temporaire) droits a minima pour le propriétaire de la vue gestion_schema_usr :
NOTICE: > GRANT USAGE ON SCHEMA z_asgard_admin TO g_admin_ext
NOTICE: > GRANT SELECT ON TABLE z_asgard_admin.gestion_schema TO g_admin_ext
NOTICE: ---------------------------------
NOTICE: (ré)attribution de la propriété des objets au rôle producteur du schéma :
NOTICE: > néant
NOTICE: remise à zéro des privilèges manuels du pseudo-rôle public :
NOTICE: > néant
NOTICE: remise à zéro des privilèges des autres rôles (pour le producteur, les éventuels privilèges manquants sont réattribués) :
NOTICE: > REVOKE USAGE ON SCHEMA z_asgard_admin FROM g_admin_ext
NOTICE: > REVOKE SELECT ON TABLE z_asgard_admin.gestion_schema FROM g_admin_ext
NOTICE: rétablissement des privilèges attendus pour g_admin_ext :
NOTICE: > GRANT USAGE ON SCHEMA z_asgard_admin TO g_admin_ext
NOTICE: > GRANT INSERT, SELECT, UPDATE, DELETE ON TABLE z_asgard_admin.gestion_schema TO g_admin_ext
NOTICE: suppression des privilèges par défaut :
NOTICE: > néant
NOTICE: ... Le schéma z_asgard_admin a été traité
NOTICE: ---------------------------------
(les messages relatifs à z_asgard
sont omis)
Après cette commande ASGARD sera de nouveau fonctionnel.