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

Cómo cambiar un usuario a superusuario en PostgreSQL

  • Crear un nuevo usuario
  • Ver permisos de usuario existentes
  • Alteración de permisos de usuario existentes
    • Asignación de SUPERUSER permiso
    • Revocación de permisos

La modificación de los permisos de usuario dentro de PostgreSQL puede variar desde bastante simple hasta extremadamente compleja, dependiendo de la granularidad permisiva que realmente se requiera. En la mayoría de los casos, sin embargo, es el poderoso ALTER USER comando que debe utilizarse para hacer todo, desde permitir que los usuarios inicien sesión, crear bases de datos, administrar roles e incluso convertirse en un SUPERUSER cuenta.

Exploraremos brevemente el poder del ALTER USER comando para que pueda realizar fácilmente una variedad de asignaciones y eliminaciones de permisos según surja la necesidad.

Creando un Nuevo Usuario

Antes de entrar en alteración permisos de usuario, debemos establecer una nueva cuenta de usuario (comúnmente conocida como ROLE ) para perder el tiempo.

Para comenzar, enumeraremos todos los usuarios existentes:

=# SELECT usename FROM pg_user;
 usename
----------
 postgres
(1 row)

Por defecto, postgres suele ser el único usuario que existe, por lo que queremos crear un nuevo usuario de librarian para controlar nuestra library base de datos. Esto se puede lograr usando CREATE USER comando:

=# CREATE USER librarian;
CREATE ROLE
=# SELECT usename FROM pg_user;
  usename
-----------
 postgres
 librarian
(2 rows)

Ver permisos de usuario existentes

A menudo puede ser útil examinar los permisos existentes asignados a los usuarios en el sistema. Esto se puede lograr fácilmente con \du comando desde el psql aviso:

=# \du
                             List of roles
 Role name |                   Attributes                   | Member of
-----------+------------------------------------------------+-----------
 librarian |                                                | {}
 postgres  | Superuser, Create role, Create DB, Replication | {}

Podemos ver claramente que a pesar de que ahora hemos agregado un nuevo librarian usuario, tenemos que asignarle algunos permisos.

Alteración de permisos de usuario existentes

Ahora que nuestro librarian usuario existe, podemos comenzar a usar ALTER USER para modificar los permisos otorgados a librarian .

El formato básico de ALTER USER incluye el nombre del usuario (o ROLE ) seguido de una serie de options para informar a PostgreSQL qué alteraciones permisivas hacer:

=# ALTER USER role_specification WITH OPTION1 OPTION2 OPTION3;

Estas opciones van desde CREATEDB , CREATEROLE , CREATEUSER , e incluso SUPERUSER . Además, la mayoría de las opciones también tienen una contrapartida negativa, informando al sistema que desea denegar el usuario ese permiso en particular. Estos nombres de opciones son los mismos que sus contrapartes de asignación, pero tienen el prefijo NO (por ejemplo, NOCREATEDB , NOCREATEROLE , NOSUPERUSER ).

Asignación de SUPERUSER permiso

Ahora que entendemos los conceptos básicos de la creación de usuarios y el uso de ALTER USER para modificar permisos, simplemente podemos usar el SUPERUSER opción para asignar nuestro librarian usuario SUPERUSER permiso:

=# ALTER USER librarian WITH SUPERUSER;
ALTER ROLE

Efectivamente, si mostramos nuestra lista de permisos ahora, veremos librarian tiene el nuevo SUPERUSER permiso que queremos:

=# \du
                             List of roles
 Role name |                   Attributes                   | Member of
-----------+------------------------------------------------+-----------
 librarian | Superuser                                      | {}
 postgres  | Superuser, Create role, Create DB, Replication | {}

Revocación de permisos

En el caso de que cometamos un error y asignemos un permiso que luego deseamos revocar, simplemente emita el mismo ALTER USER comando pero agregue el NO prefijo delante de las opciones permisivas a revocar.

Por ejemplo, podemos eliminar SUPERUSER de nuestro librarian usuario así:

=# ALTER USER librarian WITH NOSUPERUSER;
ALTER ROLE
=# \du
                             List of roles
 Role name |                   Attributes                   | Member of
-----------+------------------------------------------------+-----------
 librarian |                                                | {}
 postgres  | Superuser, Create role, Create DB, Replication | {}