SET ROLE
SET ROLE — initialise l'identifiant utilisateur courant de la
session en cours
Synopsis
SET [ SESSION | LOCAL ] ROLE nomrôle
SET [ SESSION | LOCAL ] ROLE NONE
RESET ROLE
Description
Cette commande positionne l'identifiant utilisateur courant suivant
le contexte de la session SQL en cours à
nomrôle
. Le nom du rôle peut être un
identifiant ou une chaîne littérale. Après
SET ROLE
, la vérification des
droits sur les commandes SQL est identique à ce qu'elle serait si
le rôle nommé s'était lui-même connecté.
Il est obligatoire que l'utilisateur de la session courante soit
membre du rôle
nomrôle
(si
l'utilisateur de la session est superutilisateur, tous les rôles
sont utilisables).
Les modificateurs SESSION et LOCAL agissent de la même façon que pour la commande
SET.
Les formes NONE et RESET réinitialisent l'identifiant de l'utilisateur
à la valeur de session. Ces formes peuvent être exécutées par tout
utilisateur.
Notes
L'utilisation de cette commande permet d'étendre ou de restreindre
les privilèges d'un utilisateur. Si le rôle de l'utilisateur de la
session comprend l'attribut INHERITS,
alors il acquiert automatiquement les droits de chaque rôle qu'il
peut prendre par la commande
SET
ROLE
; dans ce cas,
SET ROLE
supprime tous les droits
affectés directement à l'utilisateur de la session et les autres
droits des rôles dont il est membre, ne lui laissant que les droits
disponibles sur le rôle nommé. A l'opposé, si le rôle session de
l'utilisateur dispose de l'attribut NOINHERITS,
SET
ROLE
supprime les droits affectés directement à
l'utilisateur session et les remplace par les privilèges du rôle
nommé.
En particulier, quand un utilisateur choisit un rôle autre que
superutilisateur via
SET
ROLE
, il perd les droits superutilisateur.
SET ROLE
a des effets
comparables à SET SESSION AUTHORIZATION mais la
vérification des droits diffère. De plus,
SET SESSION AUTHORIZATION
détermine les rôles autorisés dans les commandes
SET ROLE
ultérieures alors que
SET ROLE
ne modifie
pas les rôles accessibles par un futur
SET ROLE
.
Exemples
SELECT SESSION_USER, CURRENT_USER;
session_user | current_user
--------------+--------------
peter | peter
SET ROLE 'paul';
SELECT SESSION_USER, CURRENT_USER;
session_user | current_user
--------------+--------------
peter | paul
Compatibilité
PostgreSQL™ autorise la
syntaxe identifiant ("nom_role") alors que
le SQL standard impose une chaîne littérale pour le nom du rôle.
SQL n'autorise pas cette commande lors d'une transaction ;
PostgreSQL™ n'est pas aussi
restrictif, rien ne justifie cette interdiction. Les modificateurs
SESSION et LOCAL
sont des extensions PostgreSQL™ tout comme la syntaxe
RESET.