asgard_initialise_obj
fonction de réinitialisation des droits selon le standard d'ASGARD (cible = un objet donné en argument)
z_asgard.asgard_initialise_obj(obj_schema text, obj_nom text, obj_typ text)
La fonction asgard_initialise_obj
permet de réinitialiser les droits sur un objet. Pour les rôles producteur[1], éditeur[2] et lecteur[3] désignés dans la table de gestion[4] pour son schéma, elle revient aux privilèges standards. Les privilèges des autres rôles sur l’objet sont effacés (hors privilèges implicites du pseudo-rôle public – USAGE
sur les fonctions et les types).
Schéma⚓
z_asgard
La fonction peut être utilisée par tout utilisateur membre du rôle producteur du schéma contenant l'objet visé.
Syntaxe avec des arguments positionnels⚓
SELECT z_asgard.asgard_initialise_obj('%obj_schema', '%obj_nom', '%obj_typ') ;
Les arguments doivent être spécifiés dans l’ordre.
Syntaxe avec des arguments nommés⚓
SELECT z_asgard.asgard_initialise_obj(obj_schema := '%obj_schema', obj_nom := '%obj_nom', obj_typ := '%obj_typ') ;
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⚓
obj_schema
est une chaîne de caractères correspondant au nom du schéma contenant l’objet ;obj_nom
est une chaîne de caractères correspondant au nom de l’objet ;obj_typ
est une chaîne de caractères correspondant au type de l’objet.
Pour obj_typ, les valeurs acceptées sont :
table | partitioned table | view | materialized view | foreign table | sequence |
function | aggregate | procedure | routine | type | domain |
En pratique, « partitioned table » sera assimilé à « table » et peut être directement écrit comme tel.
Pour les versions antérieures à PostgreSQL 11, dans lesquelles les procédures et routines ne sont pas des objets PostgreSQL à proprement parler, les types « function », « aggregate », « procedure » et « routine » sont équivalent à « function ». Sous PostgreSQL 11 et supérieur, ils sont synonymes de « routine », mot-clé accepté par PostgreSQL pour les commandes portant indifféremment sur des fonctions (agrégats compris) ou des procédures.
Les valeurs de obj_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"'.
C’est également vrai pour obj_nom
, sauf dans le cas des routines (obj_typ
« function », « aggregate », « procedure » ou « routine »). Pour ces objets, les guillemets devront impérativement être présents dans obj_nom
si le nom n’est pas normalisé – et seulement dans ce cas. Ainsi, on écrira 'suite_arithmetique(integer,integer)' (normalisé, sans guillemets), mais '"Suite Arithmétique"(integer,integer)' (non normalisé, avec guillemets).
De plus, lorsque l’objet considéré est une routine, obj_nom
doit spécifier les types de ses arguments entre parenthèses.
Résultat⚓
« __ REINITIALISATION REUSSIE. » si la requête s’est exécutée normalement.
Exemple :
Le producteur du schéma c_bibliotheque
a révoqué par erreur les droits de l’éditeur g_snum
sur la table emprunt_livre
. Il utilise la fonction asgard_intialise_obj
pour les lui rendre sans risquer d’en oublier.
SELECT z_asgard.asgard_initialise_obj('c_bibliotheque', 'emprunt_livre', 'table') ;
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 SELECT ON TABLE c_bibliotheque.emprunt_livre FROM g_consult
NOTICE: application des privilèges standards pour le rôle éditeur du schéma :
NOTICE: > GRANT SELECT, UPDATE, DELETE, INSERT ON TABLE c_bibliotheque.emprunt_livre TO g_snum
NOTICE: application des privilèges standards pour le rôle lecteur du schéma :
NOTICE: > GRANT SELECT ON TABLE c_bibliotheque.emprunt_livre TO g_consult