ALTER ROLE — Modifier un rôle de base de données
ALTER ROLEspécification_rôle[ WITH ]option[ ... ] oùoptionpeut être : SUPERUSER | NOSUPERUSER | CREATEDB | NOCREATEDB | CREATEROLE | NOCREATEROLE | INHERIT | NOINHERIT | LOGIN | NOLOGIN | REPLICATION | NOREPLICATION | BYPASSRLS | NOBYPASSRLS | CONNECTION LIMITlimiteconnexion| [ ENCRYPTED ] PASSWORD 'motdepasse' | PASSWORD NULL | VALID UNTIL 'dateheure' ALTER ROLEnomRENAME TOnouveau_nomALTER ROLE {spécification_rôle| ALL } [ IN DATABASEnom_base] SETparamètre_configuration{ TO | = } {value| DEFAULT } ALTER ROLE {spécification_rôle| ALL } [ IN DATABASEnom_base] SETparamètre_configurationFROM CURRENT ALTER ROLE {spécification_rôle| ALL } [ IN DATABASEnom_base] RESETparamètre_configurationALTER ROLE {spécification_rôle| ALL } [ IN DATABASEnom_base] RESET ALL oùspécification_rôlepeut valoir :nom_rôle| CURRENT_ROLE | CURRENT_USER | SESSION_USER
ALTER ROLE modifie les propriétés 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 par les
superutilisateurs de base de données.
Les rôles qui ne sont pas superutilisater et qui ont l'attribut
CREATEROLE peuvent modifier la plupart de ces propriétés,
mais seulement pour les rôles qui n'ont pas les attributs SUPERUSER et
REPLICATION sur lesquels ils ont le droit
ADMIN OPTION. Les utilisateurs standards ne peuvent pas
modifier l'attribut SUPERUSER et peuvent modifier les
attributs CREATEDB, REPLICATION et
BYPASSRLS seulement s'ils possèdent eux-mêmes l'attribut
correspondant.
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
superutilisateurs peuvent renommer n'importe quel rôle. Les rôles disposant
de l'attribut CREATEROLE peuvent renommer tout rôle qui
n'est pas superutilisateur et pour lequel ils ont le droit ADMIN
OPTION. 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 sel 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écifiques à 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 superutilisateurs peuvent modifier les valeurs de session de n'importe
quel utilisateur. Les rôles disposant de l'attribut
CREATEROLE peuvent modifier les valeurs par défaut pour
les rôles ordinaires (non superutilisateurs et non réplication) pour lesquels
ils ont l'option ADMIN OPTION. 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 superutilisateur. Seuls les superutilisateurs peuvent modifier un
paramétrage pour tous les rôles dans toutes les bases de données.
nom #Le nom du rôle dont les attributs sont modifiés.
CURRENT_ROLECURRENT_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.
SUPERUSERNOSUPERUSERCREATEDBNOCREATEDBCREATEROLENOCREATEROLEINHERITNOINHERITLOGINNOLOGINREPLICATIONNOREPLICATIONBYPASSRLSNOBYPASSRLSCONNECTION LIMIT limite_connexionENCRYPTED ] PASSWORD mot_de_passe | PASSWORD NULLVALID 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_configurationvaleur #
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 du 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 initialisé 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.
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.
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 créer d'autres rôles et 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;
L'instruction ALTER ROLE est une extension
PostgreSQL.