Documentation PostgreSQL 14.22 » Référence » Commandes SQL » SET ROLE

Précédent | Niveau supérieur | Suivant
SET CONSTRAINTS | Sommaire | SET SESSION AUTHORIZATION

## SET ROLE

SET ROLE — initialise l'identifiant utilisateur courant de la session en cours

## Synopsis

    SET [ SESSION | LOCAL ] ROLE nom_rôle
    SET [ SESSION | LOCAL ] ROLE NONE
    RESET ROLE

## Description

Cette commande positionne l'identifiant utilisateur courant suivant la session SQL en cours à `nom_rô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 `nom_rôle` (si l'utilisateur de la session est super-utilisateur, tous les rôles sont utilisables).

Les modificateurs `SESSION` et `LOCAL` agissent de la même façon que pour la commande `SET`.

`SET ROLE NONE` initialise l'identifiant utilisateur courant avec l'identifiant de la session en cours, tel qu'il est renvoyé par `session_user`. `RESET ROLE` initialise l'identifiant de l'utilisateur courant avec le paramètre à la connexion indiqué par les options en ligne de commande, `ALTER ROLE` ou `ALTER DATABASE`, si de tels paramètres existent. Sinon, `RESET ROLE` initialise l'identifiant utilisateur courant avec l'identifiant utilisateur courant. Ces formats peuvent être exécutés 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 `INHERIT`, 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 `NOINHERIT`, `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 super-utilisateur via `SET ROLE`, il perd les droits super-utilisateur.

`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`.

`SET ROLE` ne traite pas les variables de session indiqué par les paramètres du rôle (et configurés avec `ALTER ROLE` ; cela ne survient qu'à la connexion.

`SET ROLE` ne peut pas être utilisé dans une fonction `SECURITY DEFINER`.

## 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`.

## Voir aussi

SET SESSION AUTHORIZATION