Un rol de base de datos puede tener varios atributos que definen sus privilegios e interactúan con el sistema de autenticación de clientes.
Sólo los roles que tienen el atributo LOGIN se pueden usar
como el nombre de rol inicial para una conexión de base de datos. Un rol con
el atributo LOGIN se puede considerar equivalente a un
“usuario de base de datos”. Para crear un rol con privilegio de inicio de sesión
(login), utiliza cualquiera de los dos:
CREATE ROLEnameLOGIN; CREATE USERname;
(CREATE USER es equivalente a CREATE ROLE
excepto que CREATE USER incluye LOGIN por
defecto, mientras que CREATE ROLE no lo hace).
Un superusuario de la base de datos evade todos los controles de permisos, excepto el derecho
a iniciar sesión. Este es un privilegio peligroso y no debe usarse a la ligera; lo mejor es
hacer la mayor parte de tu trabajo como un rol que no sea superusuario. Para crear un nuevo
superusuario de base de datos, utiliza CREATE ROLE .
Debes hacer esto como un rol que ya sea superusuario.
name SUPERUSER
A un rol se le debe otorgar explícitamente permiso para crear bases de datos
(excepto a los superusuarios, ya que estos evaden todos los controles de permisos).
Para crear un rol de este tipo, utiliza CREATE ROLE .
name CREATEDB
A un rol se le debe otorgar explícitamente permiso para crear más roles
(excepto a los superusuarios, ya que estos evaden todos los controles de permisos).
Para crear un rol de este tipo, utiliza CREATE ROLE .
Un rol con el privilegio name CREATEROLECREATEROLE puede alterar y eliminar roles que le hayan
sido otorgados al usuario con CREATEROLE con la opción ADMIN.
Dicha concesión ocurre automáticamente cuando un usuario con CREATEROLE que no es
superusuario crea un nuevo rol, de modo que, por defecto, un usuario con CREATEROLE
puede alterar y eliminar los roles que ha creado.
Alterar un rol incluye la mayoría de los cambios que se pueden hacer usando
ALTER ROLE, incluyendo, por ejemplo, cambiar contraseñas.
También incluye las modificaciones a un rol que se pueden hacer usando los comandos
COMMENT y SECURITY LABEL.
Sin embargo, CREATEROLE no otorga la capacidad de crear roles SUPERUSER,
ni otorga ningún poder sobre los roles SUPERUSER que ya existen.
Además, CREATEROLE no otorga el poder de crear usuarios de REPLICATION,
ni la capacidad de otorgar o revocar el privilegio REPLICATION, ni la capacidad
de modificar las propiedades de rol de dichos usuarios. Sin embargo, sí permite usar
ALTER ROLE ... SET y ALTER ROLE ... RENAME en roles
de REPLICATION, así como el uso de COMMENT ON ROLE,
SECURITY LABEL ON ROLE y DROP ROLE.
Finalmente, CREATEROLE no confiere la capacidad de otorgar o revocar
el privilegio BYPASSRLS.
A un rol se le debe otorgar explícitamente permiso para iniciar la replicación en flujo (streaming
replication) (excepto a los superusuarios, ya que estos evaden todos los controles de permisos).
Un rol utilizado para la replicación en flujo también debe tener el permiso LOGIN.
Para crear un rol de este tipo, utiliza CREATE ROLE .
name REPLICATION LOGIN
Una contraseña sólo es significativa si el método de autenticación del cliente requiere que
el usuario proporcione una contraseña al conectarse a la base de datos. Los métodos de autenticación
password y md5 hacen uso de contraseñas. Las contraseñas de
la base de datos son independientes de las contraseñas del sistema operativo. Especifica una
contraseña al crear el rol con CREATE ROLE .
name PASSWORD 'string'
Por defecto, un rol hereda los privilegios de los roles de los que es miembro.
Sin embargo, para crear un rol que no herede privilegios por defecto, utiliza
CREATE ROLE .
Alternativamente, la herencia se puede anular para concesiones individuales utilizando
name NOINHERITWITH INHERIT TRUE o WITH INHERIT FALSE.
A un rol se le debe otorgar explícitamente permiso para evadir todas las políticas de seguridad
a nivel de fila (RLS) (excepto a los superusuarios, ya que estos evaden todos los controles
de permisos). Para crear un rol de este tipo, utiliza CREATE ROLE como superusuario.
name BYPASSRLS
El límite de conexiones puede especificar cuántas conexiones concurrentes puede realizar un rol.
-1 (el valor por defecto) significa que no hay límite. Especifica el límite de conexiones al
crear el rol con CREATE ROLE .
name CONNECTION LIMIT 'integer'
Los atributos de un rol se pueden modificar después de su creación con
ALTER ROLE.
Consulta las páginas de referencia de los comandos CREATE ROLE
y ALTER ROLE para más detalles.
Un rol también puede tener valores por defecto específicos para muchas de las configuraciones de tiempo de ejecución descritas en Chapter 19. Por ejemplo, si por alguna razón deseas desactivar los escaneos de índices (consejo: no es una buena idea) cada vez que te conectas, puedes usar:
ALTER ROLE myname SET enable_indexscan TO off;
Esto guardará la configuración (pero no la establecerá inmediatamente). En las conexiones posteriores
de este rol, parecerá como si se hubiera ejecutado SET enable_indexscan TO off
justo antes de que comenzara la sesión. Aún puedes alterar esta configuración durante la sesión;
sólo será el valor por defecto. Para eliminar una configuración por defecto específica de un rol,
utiliza ALTER ROLE .
Ten en cuenta que las configuraciones por defecto específicas de roles sin el privilegio
rolename RESET varnameLOGIN son bastante inútiles, ya que nunca se invocarán.
Cuando un no superusuario crea un rol utilizando el privilegio CREATEROLE,
el rol creado se otorga automáticamente de vuelta al usuario creador, tal como si el superusuario
inicial hubiera ejecutado el comando GRANT created_user TO creating_user WITH ADMIN TRUE,
SET FALSE, INHERIT FALSE. Dado que un usuario con CREATEROLE sólo
puede ejercer privilegios especiales con respecto a un rol existente si tiene ADMIN OPTION
sobre él, esta concesión es suficiente para permitir que un usuario con CREATEROLE
administre los roles que creó. Sin embargo, debido a que se crea con INHERIT FALSE, SET
FALSE, el usuario con CREATEROLE no hereda los privilegios del rol
creado, ni puede acceder a los privilegios de ese rol usando SET ROLE. Sin
embargo, dado que cualquier usuario que tenga ADMIN OPTION en un rol puede otorgar
la pertenencia en ese rol a cualquier otro usuario, el usuario con CREATEROLE
puede obtener acceso al rol creado simplemente otorgándose ese rol a sí mismo con las opciones
INHERIT y/o SET. Por lo tanto, el hecho de que los privilegios
no se hereden por defecto ni se otorgue SET ROLE por defecto es una salvaguarda
contra accidentes, no una característica de seguridad. Ten en cuenta también que, debido a que esta
concesión automática es otorgada por el superusuario inicial, no puede ser eliminada o cambiada por el
usuario con CREATEROLE; sin embargo, cualquier superusuario podría revocarla,
modificarla y/o emitir concesiones adicionales a otros usuarios con CREATEROLE.
Aquellos usuarios con CREATEROLE que tengan ADMIN OPTION sobre
un rol en cualquier momento dado pueden administrarlo.