Los roles de la base de datos son conceptualmente completamente independientes de
los usuarios del sistema operativo. En la práctica, puede ser conveniente mantener
una correspondencia, pero esto no es obligatorio. Los roles de la base de datos
son globales para toda la instalación del clúster de bases de datos (y no
por cada base de datos individual). Para crear un rol, utiliza el comando SQL CREATE ROLE:
CREATE ROLE name;
name sigue las reglas para los
identificadores SQL: o bien simple sin caracteres especiales, o
entre comillas dobles. (En la práctica, por lo general querrás añadir opciones adicionales,
como LOGIN, al comando. Más abajo aparecen más detalles).
Para eliminar un rol existente, utiliza el comando análogo
DROP ROLE:
DROP ROLE name;
Para mayor comodidad, se proporcionan los programas createuser y dropuser como envolturas (wrappers) de estos comandos SQL que se pueden llamar desde la línea de comandos de la shell:
createusernamedropusername
Para determinar el conjunto de roles existentes, examina el catálogo del sistema pg_roles,
por ejemplo:
SELECT rolname FROM pg_roles;
o para ver sólo aquellos que son capaces de iniciar sesión:
SELECT rolname FROM pg_roles WHERE rolcanlogin;
El metacomando \du del programa psql
también es útil para listar los roles existentes.
Para arrancar el sistema de base de datos, un sistema recién inicializado
siempre contiene un rol predefinido capaz de iniciar sesión. Este rol
es siempre un “superusuario”, y tendrá el mismo nombre
que el usuario del sistema operativo que inicializó el clúster de la base de datos
con initdb, a menos que se especifique un nombre diferente.
Este rol suele llamarse postgres. Para poder crear más roles,
primero tienes que conectarte como este rol inicial.
Cada conexión al servidor de la base de datos se realiza utilizando el nombre de algún
rol en particular, y este rol determina los privilegios de acceso iniciales para los comandos
emitidos en esa conexión. El nombre del rol a usar para una conexión de base de datos en particular
es indicado por el cliente que está iniciando la solicitud de conexión de una manera específica
de la aplicación. Por ejemplo, el programa psql utiliza la opción de línea de
comandos -U para indicar el rol con el que conectarse. Muchas aplicaciones asumen
por defecto el nombre del usuario actual del sistema operativo (incluyendo createuser
y psql). Por lo tanto, a menudo es conveniente mantener una correspondencia
de nombres entre los roles y los usuarios del sistema operativo.
El conjunto de roles de la base de datos con los que se puede conectar una conexión de cliente dada se determina mediante la configuración de autenticación de clientes, como se explica en Chapter 20. (Por lo tanto, un cliente no está limitado a conectarse como el rol que coincide con su usuario del sistema operativo, al igual que el nombre de usuario de una persona no tiene por qué coincidir con su nombre real). Dado que la identidad del rol determina el conjunto de privilegios disponibles para un cliente conectado, es importante configurar cuidadosamente los privilegios al establecer un entorno multiusuario.