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 sur z_asgard et z_asgard_admin, si ce qu’ asgard_initialise_all_schemas saura corriger la perte du privilège SELECT de g_admin_ext sur gestion_schema, au contraire de asgard_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é.

Schéma

z_asgard_admin

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

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 + z_asgard et z_asgard_admin, qu’ils soient référencés ou non. Elle contrôle la cohérence des propriétaires des objets et du schéma avec le producteur[4] désigné et réinitialise les droits selon les privilèges standards du producteur, de l’éditeur[5] et du lecteur[6] renseignés dans la table de gestion[7] d’ASGARD (ceux des autres rôles sont révoqués, ainsi que les éventuels privilèges par défaut portant sur le schéma). Sur les schémas z_asgard et z_asgard_admin, elle exécute les mêmes opérations que la variante 2.

1

La fonction s’applique à tous les schémas référencés + z_asgard et z_asgard_admin, qu’ils soient référencés ou non. Elle contrôle uniquement la cohérence des propriétaires des objets et du schéma avec le producteur désigné dans la table de gestion.

2

La fonction s’applique exclusivement sur les schémas z_asgard et z_asgard_admin, et ce même s’ils n’étaient pas référencés (auquel cas la fonction les référence).

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.

1
2
SELECT z_asgard_admin.asgard_initialise_all_schemas() ;

Cette commande équivaut à :

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

1
2
SELECT z_asgard_admin.asgard_initialise_all_schemas(2) ;
1
2
NOTICE: (temporaire) droits a minima pour le propriétaire de la vue gestion_schema_usr :
3
NOTICE: > GRANT USAGE ON SCHEMA z_asgard_admin TO g_admin_ext
4
NOTICE: > GRANT SELECT ON TABLE z_asgard_admin.gestion_schema TO g_admin_ext
5
NOTICE: ---------------------------------
6
NOTICE: (ré)attribution de la propriété des objets au rôle producteur du schéma :
7
NOTICE: > néant
8
NOTICE: remise à zéro des privilèges manuels du pseudo-rôle public :
9
NOTICE: > néant
10
NOTICE: remise à zéro des privilèges des autres rôles (pour le producteur, les éventuels privilèges manquants sont réattribués) :
11
NOTICE: > REVOKE USAGE ON SCHEMA z_asgard_admin FROM g_admin_ext
12
NOTICE: > REVOKE SELECT ON TABLE z_asgard_admin.gestion_schema FROM g_admin_ext
13
NOTICE: rétablissement des privilèges attendus pour g_admin_ext :
14
NOTICE: > GRANT USAGE ON SCHEMA z_asgard_admin TO g_admin_ext
15
NOTICE: > GRANT INSERT, SELECT, UPDATE, DELETE ON TABLE z_asgard_admin.gestion_schema TO g_admin_ext
16
NOTICE: suppression des privilèges par défaut :
17
NOTICE: > néant
18
NOTICE: ... Le schéma z_asgard_admin a été traité
19
NOTICE: ---------------------------------

(les messages relatifs à z_asgard sont omis)

Après cette commande ASGARD sera de nouveau fonctionnel.