En PostgreSQL, todo se basa en el concepto de rol .
Cuando instaló PostgreSQL por primera vez en macOS, el script creó un rol con su nombre de usuario de macOS , con una lista de permisos concedidos.
No hay usuarios en PostgreSQL, solo roles .
Al ejecutar psql postgres
en su terminal, iniciará sesión automáticamente con su nombre de usuario de macOS en PostgreSQL, por lo tanto, accederá al rol creado.
En mi caso los flaviocopes
se creó el rol, y puedo verlo usando el \du
comando:
¿Ver? Tengo los siguientes atributos de roles por defecto:
Superuser
Create role
Create DB
Replication
Bypass RLS
y no soy miembro de ningún otro rol (más sobre esto más adelante)
Creando un nuevo rol
Se crea un nuevo rol usando CREATE ROLE
comando:
CREATE ROLE <role>;
Por ejemplo:
CREATE ROLE testing;
Obtuvimos un nuevo rol, con el Cannot login
atributo de rol. Nuestro usuario recién creado no podrá iniciar sesión.
Puedes probar escribiendo \q
y luego psql postgres -U testing
, pero verá este error:
Para solucionar este problema debemos agregar el LOGIN
atributo de rol en la creación:
CREATE ROLE <role> WITH LOGIN;
Si eliminamos ese rol usando:
DROP ROLE <role>;
y agrega WITH LOGIN
esta vez:
DROP ROLE testing;
CREATE ROLE testing WITH LOGIN;
Podemos ver que el testing
rol puede iniciar sesión, porque no tenemos el Cannot login
atributo de rol esta vez:
Prueba agregando el comando \q
para salir, y luego psql postgres -U testing
:
Observe que el prompt cambiado de =#
a =>
porque no tenemos el Superuser
atributo de rol ahora.
Agregar una contraseña a un rol
En el anterior CREATE ROLE
comando creamos un rol sin contraseña. Por supuesto, es muy importante tener contraseñas (seguras). Puede agregar una contraseña utilizando PASSWORD
palabra clave:
CREATE ROLE <role> WITH LOGIN PASSWORD '<password>';
CREAR USUARIO
Una forma alternativa de definir roles con LOGIN
El atributo agregado automáticamente (creando efectivamente usuarios que pueden iniciar sesión) es usar CREATE USER
:
CREATE USER <role> PASSWORD '<password>';
Agregar un atributo de rol a un rol
Un atributo de rol se puede agregar más tarde a un rol usando ALTER ROLE
comando.
Supongamos que creamos un rol sin el atributo LOGIN:
CREATE ROLE <username> PASSWORD '<password>';
Podemos agregarlo usando:
ALTER ROLE <role> WITH LOGIN;
Atributos de rol incorporados
Vimos el LOGIN
atributo de rol ya, para permitir que un rol inicie sesión.
Pero, ¿cuáles son otros atributos de roles integrados que podemos usar?
LOGIN
/NOLOGIN
:permitir (o no) iniciar sesión en PostgreSQLSUPERUSER
/NOSUPERUSER
:permitir (o no) permisos de superusuario. Un superusuario de la base de datos omitirá otras verificaciones de permisos, exceptoLOGIN
(debe otorgarse por separado).CREATEDB
/NOCREATEDB
:permitir (o no) la capacidad de crear nuevas bases de datosCREATEROLE
/NOCREATEROLE
:permitir (o no) la capacidad de crear nuevos rolesCREATEUSER
/NOCREATEUSER
:permitir (o no) la posibilidad de crear nuevos usuariosINHERIT
/NOINHERIT
:permite (o no) la capacidad de hacer que los privilegios sean heredablesREPLICATION
/NOREPLICATION
:otorgar (o no) permisos de replicación (un tema avanzado que no cubriremos)
Roles de grupo
En PostgreSQL, no hay grupos de usuarios.
En su lugar, puede crear roles con ciertos permisos y luego otorgar esos roles a otros roles.
Los roles heredarán los permisos de los roles otorgados a ellos, si esos roles tienen el atributo INHERIT.
Crear un rol de grupo
Para crear un rol de grupo, escriba
CREATE ROLE <groupname>;
La sintaxis es la misma que para crear un rol.
Una vez que se crea el rol de grupo, puede agregar roles al rol de grupo usando GRANT
:
GRANT <groupname> TO <role>
Por ejemplo, podemos crear un flavio
rol de usuario, un rol de grupo "empleado" y asigne el usuario al rol de grupo:
CREATE USER flavio PASSWORD 'superSecret123$';
CREATE ROLE employee;
GRANT employee TO flavio;
Puede eliminar una función de una función de grupo usando:
REVOKE <groupname> FROM <username>
Ejemplo:
REVOKE employee FROM flavio;
Atributos de rol de grupo
De forma predeterminada, agregar un rol a un rol de grupo no hacer que el rol herede atributos (permisos) del rol del grupo.
Debe crear el rol de grupo con INHERIT
atributo.
Suponga que crea el rol de grupo de empleados y le asigna el CREATEDB
atributo:
CREATE ROLE employee WITH CREATEDB INHERIT;
Ahora crea un nuevo rol usando INHERIT
:
CREATE ROLE flavio;
GRANT employee TO flavio;