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

Précédent | Niveau supérieur | Suivant
ALTER PUBLICATION | Sommaire | ALTER ROUTINE

## ALTER ROLE

ALTER ROLE — Modifier un rôle de base de données

## Synopsis

    ALTER ROLE spécification_rôle [ WITH ] option [ ... ]

    où option peut être :

          SUPERUSER | NOSUPERUSER
        | CREATEDB | NOCREATEDB
        | CREATEROLE | NOCREATEROLE
        | INHERIT | NOINHERIT
        | LOGIN | NOLOGIN
        | REPLICATION | NOREPLICATION
        | BYPASSRLS | NOBYPASSRLS
        | CONNECTION LIMIT limiteconnexion
        | [ ENCRYPTED ] PASSWORD 'motdepasse' | PASSWORD NULL
        | VALID UNTIL 'dateheure'

    ALTER ROLE nom RENAME TO nouveau_nom

    ALTER ROLE { spécification_rôle | ALL } [ IN DATABASE nom_base ] SET paramètre_configuration { TO | = } { value | DEFAULT }
    ALTER ROLE { spécification_rôle | ALL } [ IN DATABASE nom_base ] SET paramètre_configuration FROM CURRENT
    ALTER ROLE { spécification_rôle | ALL } [ IN DATABASE nom_base ] RESET paramètre_configuration
    ALTER ROLE { spécification_rôle | ALL } [ IN DATABASE nom_base ] RESET ALL

    où spécification_rôle peut valoir :

        nom_rôle
      | CURRENT_ROLE
      | CURRENT_USER
      | SESSION_USER

## Description

`ALTER ROLE` modifie les attributs d'un rôle PostgreSQL.

La première variante listée dans le synopsis, permet de modifier la plupart des attributs de rôle spécifiables dans la commande `CREATE ROLE`. (Tous les attributs possibles sont couverts, à l'exception de la gestion des appartenances ; `GRANT` et `REVOKE` sont utilisés pour cela.) Les attributs qui ne sont pas mentionnés dans la commande conservent leur paramètrage précédent. Tous ces attributs peuvent âtre modifiés pour tout rôle par les super-utilisateurs de base de données. Les rôles qui possédent le privilège `CREATEROLE` peuvent modifier ces paramètres à l'exception de `SUPERUSER`, `REPLICATION`, et `BYPASSRLS`, mais uniquement pour les rôles qui ne sont pas super-utilisateur. Les rôles ordinaires ne peuvent modifier que leur mot de passe.

La deuxième variante permet de modifier le nom du rôle. Les super-utilisateurs peuvent renommer n'importe quel rôle. Les rôles disposant du droit `CREATEROLE` peuvent renommer tout rôle qui n'est pas super-utilisateur. L'utilisateur de la session en cours ne peut pas être renommé. (On se connectera sous un autre utilisateur pour cela.) Comme les mots de passe chiffrés par `MD5` utilisent le nom du rôle comme grain de chiffrement, renommer un rôle efface son mot de passe si ce dernier est chiffré avec `MD5`.

Les autres variantes modifient la valeur par défaut d'une variable de configuration de session pour un rôle, soit pour toutes les bases soit, quand la clause `IN DATABASE` est spécifiée, uniquement pour les sessions dans la base nommée. Si `ALL` est indiqué à la place d'un nom de rôle, ceci modifie le paramétrage de tous les rôles. Utiliser `ALL` avec `IN DATABASE` est en effet identique à utiliser la commande `ALTER DATABASE ... SET ...`.

Quand le rôle lance une nouvelle session après cela, la valeur spécifiée devient la valeur par défaut de la session, surchargeant tout paramètrage présent dans `postgresql.conf` ou provenant de la ligne de commande de `postgres`. Ceci arrive seulement lors de la connexion ; exécuter `SET ROLE` ou `SET SESSION AUTHORIZATION` ne cause pas la configuration de nouvelles valeurs pour les paramètres. L'ensemble des paramètres pour toutes les bases est surchargé par les paramètres spécifique à cette base attachés à un rôle. La configuration pour une base de données spécifique ou pour un rôle spécifique surcharge la configuration pour tous les rôles.

Les super-utilisateurs peuvent modifier les valeurs de session de n'importe quel utilisateur. Les rôles disposant du droit `CREATEROLE` peuvent modifier les valeurs par défaut pour les rôles ordinaires (non super-utilisateurs et non réplication). Les rôles standards peuvent seulement configurer des valeurs par défaut pour eux-mêmes. Certaines variables ne peuvent être configurées de cette façon ou seulement par un super-utilisateur. Seuls les super-utilisateurs peuvent modifier un paramétrage pour tous les rôles dans toutes les bases de données.

## Paramètres

`nom`

  Le nom du rôle dont les attributs sont modifiés.

`CURRENT_ROLE`
`CURRENT_USER`

  Modifie l'utilisateur actuel au lieu d'un rôle identifié explicitement.

`SESSION_USER`

  Modifie l'utilisateur de la session courante au lieu d'un rôle identifié explicitement.

`SUPERUSER`
`NOSUPERUSER`
`CREATEDB`
`NOCREATEDB`
`CREATEROLE`
`NOCREATEROLE`
`INHERIT`
`NOINHERIT`
`LOGIN`
`NOLOGIN`
`REPLICATION`
`NOREPLICATION`
`BYPASSRLS`
`NOBYPASSRLS`
`CONNECTION LIMIT` `limite_connexion`
[ `ENCRYPTED` ] `PASSWORD` `mot_de_passe` | PASSWORD NULL
`VALID UNTIL` '`dateheure`'

  Ces clauses modifient les attributs originairement configurés par `CREATE ROLE`. Pour plus d'informations, voir la page de référence `CREATE ROLE`.

`nouveau_nom`

  Le nouveau nom du rôle.

`nom_base`

  Le nom d'une base où se fera la configuration de la variable.

`paramètre_configuration`
`valeur`

  Positionne la valeur de session par défaut à `valeur` pour le paramètre de configuration `paramètre`. Si `DEFAULT` est donné pour `valeur` ou, de façon équivalente, si `RESET` est utilisé, le positionnement spécifique de la variable pour le rôle est supprimé. De cette façon, le rôle hérite de la valeur système par défaut pour les nouvelles sessions. `RESET ALL` est utilisé pour supprimer tous les paramètrages rôle. `SET FROM CURRENT` sauvegarde la valeur de la session de ce paramètre en tant que valeur du rôle. Si `IN DATABASE` est précisé, le paramètre de configuration est intialisé ou supprimé seulement pour le rôle et la base indiqués.

  Les paramètres spécifiques au rôle ne prennent effet qu'à la connexion ; `SET ROLE` et `SET SESSION AUTHORIZATION` ne traitent pas les paramètres de rôles.

  Voir SET et Chapitre 20 pour plus d'informations sur les noms et les valeurs autorisés pour les paramètres.

## Notes

`CREATE ROLE` est utilisé pour ajouter de nouveaux rôles et `DROP ROLE` pour les supprimer.

`ALTER ROLE` ne peut pas modifier les appartenances à un rôle. `GRANT` et `REVOKE` sont conçus pour cela.

Faites attention lorsque vous précisez un mot de passe non chiffré avec cette commande. Le mot de passe sera transmis en clair au serveur. Il pourrait se trouver tracer dans l'historique des commandes du client et dans les traces du serveur. psql contient une commande `\password` qui peut être utilisé pour changer le mot de passe d'un rôle sans exposer le mot de passe en clair.

Il est également possible de lier une valeur de session par défaut à une base de données plutôt qu'à un rôle ; voir ALTER DATABASE. S'il y a un conflit, les paramètres spécifiques à la paire base de données/rôle surchargent ceux spécifiques au rôle, qui eux-même surchargent ceux spécifiques à la base de données.

## Exemples

Modifier le mot de passe d'un rôle :

    ALTER ROLE davide WITH PASSWORD 'hu8jmn3';

Supprimer le mot de passe d'un rôle :

    ALTER ROLE davide WITH PASSWORD NULL;

Modifier la date d'expiration d'un mot de passe, en spécifiant que le mot de passe doit expirer à midi le 4 mai 2015 fuseau horaire UTC plus 1 heure :

    ALTER ROLE chris VALID UNTIL 'May 4 12:00:00 2015 +1';

Créer un mot de passe toujours valide :

    ALTER ROLE fred VALID UNTIL 'infinity';

Donner à un rôle la capacité de gérer d'autres rôles et de créer de nouvelles bases de données :

    ALTER ROLE miriam CREATEROLE CREATEDB;

Donner à un rôle une valeur différente de celle par défaut pour le paramètre maintenance_work_mem :

    ALTER ROLE worker_bee SET maintenance_work_mem = 100000;

Donner à un rôle une configuration différente, spécifique à une base de données, du paramètre client_min_messages :

    ALTER ROLE fred IN DATABASE devel SET client_min_messages = DEBUG;

## Compatibilité

L'instruction `ALTER ROLE` est une extension PostgreSQL.

## Voir aussi

CREATE ROLE, DROP ROLE, ALTER DATABASE, SET