Création d'objets dans les schémas

Généralités sur les créations d'objets

La création d’objets dans les schémas se fait selon les possibilités habituelles (création directe en SQL, import/export, COPY, etc.). Si le schéma cible est référencé dans sa table de gestion[1], ASGARD se contente d’intercepter les commandes de création pour réaffecter la propriété des nouveaux objets au rôle de groupe producteur[2] du schéma et, lorsqu’il y a lieu, attribuer les droits standards de l’éditeur[3] et du lecteur[4] désignés pour le schéma.

Exemple

Lorsque jon.snow, membre de g_snum, crée la table journal_du_mur dans le schéma w_snow dont g_snum est le producteur et public le lecteur, g_snum devient automatiquement propriétaire de la table et les droits de lecture usuels sont conférés à public :

1
2
CREATE TABLE w_snow.journal_du_mur (
3
    id serial PRIMARY KEY,
4
    jour date,
5
    entree text
6
    ) ;
1
2
NOTICE: réattribution de la propriété de w_snow.journal_du_mur au rôle producteur du schéma :
3
NOTICE: > ALTER table w_snow.journal_du_mur OWNER TO g_snum
4
NOTICE: application des privilèges standards pour le rôle lecteur du schéma :
5
NOTICE: > GRANT SELECT ON TABLE w_snow.journal_du_mur TO public
6
NOTICE: application des privilèges standards pour le rôle lecteur du schéma :
7
NOTICE: > GRANT SELECT ON SEQUENCE w_snow.journal_du_mur_id_seq TO public
8
CREATE TABLE

Cas particulier des vues et vues matérialisées

Dans le cas des vues et vues matérialisées, PostgreSQL considère à la fois les droits de l’utilisateur courant sur la vue et les droits du propriétaire de la vue sur les tables ou vues sources pour déterminer les actions possibles.

Dès la création de la vue ou vue matérialisée, il importe donc de penser à attribuer les droits nécessaires à son propriétaire – c’est-à-dire au rôle producteur[2] pour son schéma.

Conseil

Lors de la création d'une vue ou d'une vue matérialisée, vérifier que le producteur de son schéma dispose des droits requis sur les tables sources, sans quoi elle sera inutilisable.

La question se pose uniquement si certaines sources ne sont pas localisées dans le même schéma que la vue. Dans le cas contraire le producteur du schéma est à la fois le propriétaire de la vue et des tables/vues sources, sur lesquelles il dispose naturellement de droits suffisants.

Concrètement, il est nécessaire que le producteur du schéma d’une vue matérialisée soit a minima membre des groupes lecteurs[4] de tous les schémas contenant ses tables sources pour qu’un utilisateur puisse la rafraîchir avec REFRESH MATERIALIZED VIEW. Le strict minimum requis est que le rôle propriétaire de la vue matérialisée (c'est-à-dire le producteur de son schéma), dispose du privilège SELECT sur chacune des tables ou vues sources. Le privilège USAGE sur le schéma que confère l’appartenance au rôle lecteur n’est pas rigoureusement nécessaire. L’utilisateur qui lance la commande de rafraîchissement devra pour sa part être membre du rôle producteur du schéma contenant la vue matérialisée.

Dans le même esprit, pour qu’il soit possible de consulter les données d’une vue non matérialisée, l’utilisateur doit appartenir a minima au groupe lecteur du schéma de la vue et le producteur de ce schéma doit appartenir a minima aux groupes lecteurs de tous les schémas contenant les tables sources de la vue. Là encore, le strict minimum requis est que le rôle propriétaire de la vue, soit le producteur de son schéma, dispose du privilège SELECT sur chacune des tables ou vues sources. Le privilège USAGE sur le schéma que confère l’appartenance au rôle lecteur n’est pas rigoureusement nécessaire.

Pour modifier des données via une vue modifiable, le producteur du schéma de la vue doit être membre de l’éditeur[3] du schéma contenant la table source et l’utilisateur être membre de l’éditeur du schéma de la vue.

action

droits de l’utilisateur

droits du producteur du schéma

rafraîchir une vue matérialisée

producteur du schéma de la vue matérialisée

lecteur, éditeur ou producteur des schémas contenant les sources de la vue matérialisée

consulter les données d’une vue matérialisée

lecteur, éditeur ou producteur du schéma de la vue matérialisée

néant

consulter les données d’une vue

lecteur, éditeur ou producteur du schéma de la vue

lecteur, éditeur ou producteur des schémas contenant les sources de la vue

éditer une vue modifiable

éditeur ou producteur du schéma de la vue

éditeur ou producteur du schéma de la table source

éditer une vue avec déclencheur INSTEAD OF

éditeur ou producteur du schéma de la vue et éditeur ou producteur des schémas des tables sur lesquelles sont répercutées les modifications

néant

La fonction de diagnostic saura repérer les vues et vues matérialisées pour lesquelles le producteur du schéma n’est pas même lecteur des données sources.

Lors de la création d’une vue ou vue matérialisée, ASGARD avertira l’utilisateur si les privilèges du producteur sont insuffisants (uniquement pour les droits de lecture, les vues modifiables non modifiables à cause de droits d'édition manquants ne sont pas signalées).

Exemple

Création d’une vue ma_vue dans le schéma c_bibliotheque, interrogeant la table ma_table du schéma c_librairie. Le producteur de c_bibliotheque, g_asgard_2 ne dispose encore d’aucun droit sur ma_table.

ASGARD renvoie un avertissement et encourage à rendre le producteur de c_bibliotheque membre du rôle g_consult, lecteur du schéma c_librairie :

1
2
ATTENTION: Le producteur du schéma de la vue c_bibliotheque.ma_vue ne dispose pas des droits nécessaires pour accéder à ses données sources.
3
DETAIL: Table source c_librairie.ma_table, producteur g_asgard_1, éditeur non défini, lecteur g_consult.
4
HINT: Pour rendre le producteur de la vue membre du rôle lecteur du schéma source, vous pouvez lancer la commande suivante : GRANT g_consult TO g_asgard_2.

À noter que le message d'avertissement pourra être moins détaillé (pas d'informations sur les lecteur et éditeur) si l'utilisateur n'est pas membre du rôle producteur du schéma contenant les sources.

ComplémentVoir aussi

Modifier les privilèges pour la désignation du lecteur ou de l'éditeur d'un schéma.