ALTER ROLE

ALTER ROLE — cambiar un rol de base de datos

Synopsis

ALTER ROLE role_specification [ WITH ] option [ ... ]

donde option puede ser:

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

ALTER ROLE name RENAME TO new_name

ALTER ROLE { role_specification | ALL } [ IN DATABASE database_name ] SET configuration_parameter { TO | = } { value | DEFAULT }
ALTER ROLE { role_specification | ALL } [ IN DATABASE database_name ] SET configuration_parameter FROM CURRENT
ALTER ROLE { role_specification | ALL } [ IN DATABASE database_name ] RESET configuration_parameter
ALTER ROLE { role_specification | ALL } [ IN DATABASE database_name ] RESET ALL

donde role_specification puede ser:

    role_name
  | CURRENT_ROLE
  | CURRENT_USER
  | SESSION_USER

Descripción

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.

Parámetros

name #

El nombre del rol cuyos atributos se van a modificar.

CURRENT_ROLE
CURRENT_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.

SUPERUSER
NOSUPERUSER
CREATEDB
NOCREATEDB
CREATEROLE
NOCREATEROLE
INHERIT
NOINHERIT
LOGIN
NOLOGIN
REPLICATION
NOREPLICATION
BYPASSRLS
NOBYPASSRLS
CONNECTION LIMIT connlimit
[ ENCRYPTED ] PASSWORD 'password'
PASSWORD NULL
VALID 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_parameter
value #

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.

Notas

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.

Ejemplos

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;

Compatibilidad

La sentencia ALTER ROLE es una extensión de PostgreSQL.

Véase también

CREATE ROLE, DROP ROLE, ALTER DATABASE, SET