ALTER ROLE — cambiar un rol de base de datos
ALTER ROLErole_specification[ WITH ]option[ ... ] dondeoptionpuede ser: SUPERUSER | NOSUPERUSER | CREATEDB | NOCREATEDB | CREATEROLE | NOCREATEROLE | INHERIT | NOINHERIT | LOGIN | NOLOGIN | REPLICATION | NOREPLICATION | BYPASSRLS | NOBYPASSRLS | CONNECTION LIMITconnlimit| [ ENCRYPTED ] PASSWORD 'password' | PASSWORD NULL | VALID UNTIL 'timestamp' ALTER ROLEnameRENAME TOnew_nameALTER ROLE {role_specification| ALL } [ IN DATABASEdatabase_name] SETconfiguration_parameter{ TO | = } {value| DEFAULT } ALTER ROLE {role_specification| ALL } [ IN DATABASEdatabase_name] SETconfiguration_parameterFROM CURRENT ALTER ROLE {role_specification| ALL } [ IN DATABASEdatabase_name] RESETconfiguration_parameterALTER ROLE {role_specification| ALL } [ IN DATABASEdatabase_name] RESET ALL donderole_specificationpuede ser:role_name| CURRENT_ROLE | CURRENT_USER | SESSION_USER
ALTER ROLE cambia los atributos de un
rol de PostgreSQL.
La primera variante de este comando listada en la sinopsis puede cambiar
muchos de los atributos del rol que se pueden especificar en
CREATE ROLE.
(Se cubren todos los atributos posibles,
excepto que no hay opciones para agregar o eliminar membresías; usa
GRANT y
REVOKE para eso).
Los atributos que no se mencionan en el comando conservan su configuración anterior.
Los superusuarios de la base de datos pueden cambiar cualquiera de estas configuraciones para cualquier rol, excepto
para cambiar la propiedad SUPERUSER del
superusuario de inicio (bootstrap superuser).
Los roles que no son superusuarios y que tienen el privilegio CREATEROLE pueden
cambiar la mayoría de estas propiedades, pero solo para los roles que no son superusuarios y
que no son de replicación para los cuales se les ha otorgado
ADMIN OPTION. Los que no son superusuarios no pueden cambiar la
propiedad SUPERUSER y pueden cambiar las propiedades
CREATEDB, REPLICATION y
BYPASSRLS solo si ellos mismos poseen la
propiedad correspondiente.
Los roles ordinarios solo pueden cambiar su propia contraseña.
La segunda variante cambia el nombre del rol.
Los superusuarios de la base de datos pueden renombrar cualquier rol.
Los roles que tienen el privilegio CREATEROLE pueden renombrar los roles que no son superusuarios
para los cuales se les ha otorgado ADMIN OPTION.
El usuario de la sesión actual no se puede renombrar.
(Conéctate como un usuario diferente si necesitas hacer eso).
Debido a que las contraseñas cifradas con MD5 usan el nombre del rol como
sal criptográfica, renombrar un rol borra su contraseña si la
contraseña está cifrada con MD5.
Las variantes restantes cambian el valor predeterminado de la sesión de un rol para una variable de
configuración, ya sea para todas las bases de datos o, cuando se especifica la cláusula IN
DATABASE, solo para las sesiones en la base de datos nombrada. Si se especifica ALL
en lugar de un nombre de rol, esto cambia la configuración para todos los roles. Usar ALL
con IN DATABASE es efectivamente lo mismo que usar el
comando ALTER DATABASE ... SET ....
Cada vez que el rol inicie posteriormente
una nueva sesión, el valor especificado se convierte en el valor predeterminado de la
sesión, anulando cualquier configuración presente en
postgresql.conf o que se haya recibido desde la línea de comandos de postgres.
Esto solo ocurre al iniciar sesión; ejecutar
SET ROLE o
SET SESSION AUTHORIZATION no hace que se establezcan nuevos
valores de configuración.
Las configuraciones establecidas para todas las bases de datos se anulan por las configuraciones específicas de la base de datos
asociadas a un rol. Las configuraciones para bases de datos específicas o roles específicos anulan las
configuraciones para todos los roles.
Los superusuarios pueden cambiar los valores predeterminados de sesión de cualquier persona. Los roles que tienen el
privilegio CREATEROLE pueden cambiar los valores predeterminados para los roles que no son superusuarios
para los cuales se les ha otorgado ADMIN OPTION.
Los roles ordinarios solo pueden establecer valores predeterminados para sí mismos.
Ciertas variables de configuración no se pueden establecer de esta manera, o solo se pueden
establecer si un superusuario emite el comando. Solo los superusuarios pueden cambiar una configuración
para todos los roles en todas las bases de datos.
name #El nombre del rol cuyos atributos se van a modificar.
CURRENT_ROLECURRENT_USER #Modificar el usuario actual en lugar de un rol identificado explícitamente.
SESSION_USER #Modificar el usuario de la sesión actual en lugar de un rol identificado explícitamente.
SUPERUSERNOSUPERUSERCREATEDBNOCREATEDBCREATEROLENOCREATEROLEINHERITNOINHERITLOGINNOLOGINREPLICATIONNOREPLICATIONBYPASSRLSNOBYPASSRLSCONNECTION LIMIT connlimitENCRYPTED ] PASSWORD 'password'PASSWORD NULLVALID UNTIL 'timestamp' #
Estas cláusulas modifican atributos establecidos originalmente por
CREATE ROLE. Para obtener más información, consulta la página de
referencia de CREATE ROLE.
new_name #El nuevo nombre del rol.
database_name #El nombre de la base de datos en la que se debe establecer la variable de configuración.
configuration_parametervalue #
Establece el valor predeterminado de la sesión de este rol para el parámetro de configuración
especificado al valor dado. Si se usa
value como DEFAULT
o, de manera equivalente, RESET, se elimina la
configuración de la variable específica del rol, por lo que el rol
heredará la configuración predeterminada del sistema en las nuevas sesiones. Usa
RESET ALL para borrar todas las configuraciones específicas del rol.
SET FROM CURRENT guarda el valor actual de la sesión del
parámetro como el valor específico del rol.
Si se especifica IN DATABASE, el parámetro de configuración
se establece o se elimina solo para el rol y la base de datos dados.
Las configuraciones de variables específicas del rol solo surten efecto al iniciar sesión;
SET ROLE y
SET SESSION AUTHORIZATION
no procesan configuraciones de variables específicas del rol.
Consulta SET y Chapter 19 para obtener más información sobre los nombres y valores de parámetros permitidos.
Usa CREATE ROLE
para agregar nuevos roles, y DROP ROLE para eliminar un rol.
ALTER ROLE no puede cambiar las membresías de un rol.
Usa GRANT y
REVOKE
para hacer eso.
Se debe tener precaución al especificar una contraseña no cifrada
con este comando. La contraseña se transmitirá al servidor
en texto plano, y también podría quedar registrada en el historial de comandos
del cliente o en el registro del servidor. psql
contiene un comando
\password que se puede usar para cambiar la
contraseña de un rol sin exponer la contraseña en texto plano.
También es posible asociar un valor predeterminado de sesión a una base de datos específica en lugar de a un rol; consulta ALTER DATABASE. Si hay un conflicto, las configuraciones específicas de base de datos y rol anulan las específicas de rol, que a su vez anulan las específicas de base de datos.
Cambiar la contraseña de un rol:
ALTER ROLE davide WITH PASSWORD 'hu8jmn3';
Eliminar la contraseña de un rol:
ALTER ROLE davide WITH PASSWORD NULL;
Cambiar la fecha de vencimiento de una contraseña, especificando que la contraseña debe vencer al mediodía del 4 de mayo de 2015 usando la zona horaria que está una hora por delante de UTC:
ALTER ROLE chris VALID UNTIL 'May 4 12:00:00 2015 +1';
Hacer que una contraseña sea válida para siempre:
ALTER ROLE fred VALID UNTIL 'infinity';
Dar a un rol la capacidad de administrar otros roles y crear nuevas bases de datos:
ALTER ROLE miriam CREATEROLE CREATEDB;
Dar a un rol una configuración no predeterminada del parámetro maintenance_work_mem:
ALTER ROLE worker_bee SET maintenance_work_mem = 100000;
Dar a un rol una configuración no predeterminada y específica de la base de datos del parámetro client_min_messages:
ALTER ROLE fred IN DATABASE devel SET client_min_messages = DEBUG;
La sentencia ALTER ROLE es una
extensión de PostgreSQL.