sql >> Base de Datos >  >> RDS >> PostgreSQL

Permisos de usuario de PostgreSQL

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 PostgreSQL
  • SUPERUSER / NOSUPERUSER :permitir (o no) permisos de superusuario. Un superusuario de la base de datos omitirá otras verificaciones de permisos, excepto LOGIN (debe otorgarse por separado).
  • CREATEDB / NOCREATEDB :permitir (o no) la capacidad de crear nuevas bases de datos
  • CREATEROLE / NOCREATEROLE :permitir (o no) la capacidad de crear nuevos roles
  • CREATEUSER / NOCREATEUSER :permitir (o no) la posibilidad de crear nuevos usuarios
  • INHERIT / NOINHERIT :permite (o no) la capacidad de hacer que los privilegios sean heredables
  • REPLICATION / 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;