Contenido

Gestionar permisos en PostgreSQL

Es importante comprender que en PostgreSQL los usuarios no existen como tal y toda esta gestión cae sobre el concepto de los roles. Al principio esto puede ser difícil de comprender pero poco a poco te acostumbrarás. Realmente se hace login con un rol como si se tratase de un usuario. Es este rol el que tiene asignados los permisos necesarios para poder realizar ciertas acciones.

Ejecutando el comando \du en la terminal de PostgreSQL, se listaran los usuarios con sus correspondientes permisos:

En la imagen se puede observar mi usuario junto con los permisos asignados. Verás más adelante que significa cada uno. También has podido observar que aparece Member of. Básicamente se refiere a que un rol puede pertenecer a grupos con roles y heredar sus permisos.

Gestión de permisos por rol

Crear un nuevo rol

Crear un nuevo rol es tan fácil como ejecutar el siguiente comando: CREATE ROLE <role>;

Ejemplo: CREATE ROLE backend_services;

y ejecutando de nuevo el comando \du para listar los roles, encontramos nuestro nuevo rol. Eso sí, sin ningún permiso asociado. Este role no podrá hacer nada. Ni tan solo iniciar sesión. Listar roles

Aunque más adelante verás como añadir roles y lo que significa cada uno, te dejo una variante del comando anterior para añadir roles directamente en la creación.

CREATE ROLE backend_services_2 WITH LOGIN; y como ves ahora si puede hacer login porque tiene ese permiso.

Listar roles

y por supuesto, algo imprescindible es poder crear un rol con contraseña CREATE ROLE <role> WITH LOGIN PASSWORD '<password>';

Borrar un rol existente

Comando: DROP ROLE <role>; Ejemplo: DROP ROLE backend_services; Resultado:

Listar roles

Añadir permisos a roles

ALTER ROLE <role> WITH LOGIN;

Ejemplo: ALTER ROLE backend_services_2 WITH LOGIN;

Resultado:

Actualizar roles

Permisos disponibles

  • LOGIN/ NOLOGIN: permitir (o no) iniciar sesión en PostgreSQL.
  • SUPERUSER/ NOSUPERUSER: permite (o no) permisos de superusuario (*).
  • CREATEDB/ NOCREATEDB: permite (o no) la capacidad de crear nuevas bases de datos.
  • CREATEROLE/ NOCREATEROLE: permite (o no) la capacidad de crear nuevos roles.
  • CREATEUSER/ NOCREATEUSER: permite (o no) la capacidad de crear nuevos usuarios.
  • INHERIT/ NOINHERIT: permite (o no) la capacidad de hacer que los privilegios se pueda heredar.
  • REPLICATION/ NOREPLICATION: concede (o no) permisos de replica.

(*) Un superusuario de la base de datos omitirá otras verificaciones de permisos, excepto LOGIN(debe otorgarse por separado).

Gestión de permisos por roles grupales

Como leíste al inicio de este artículo, los roles puedes pertenecer a grupos de roles que tienen sus propios permisos y, de esa forma, heredar los permisos del grupo al que pertenecen. Debes saber que los roles heredarán los permisos de los grupos a los que pertenecen solo si esos roles tienen el atributo INHERIT. Podría decirse que por defecto un role cuenta con permiso NOINHERIT

Crear un rol grupal

Comando: CREATE ROLE <groupname>;

Ejemplo: CREATE ROLE developers WITH SUPERUSER;

Resultado:

Crear grupo de roles

Asignar un grupo a un rol

Comando: GRANT <groupname> TO <role>

Ejemplo: GRANT developers TO backend_services_2;

Resultado:

Asignar grupo de roles a un rol

Eliminar un grupo a un rol

Comando: REVOKE <groupname> FROM <role>

Ejemplo: REVOKE developers FROM backend_services_2;

Resultado:

Revocar grupo de roles a un rol