Este artículo explica cómo listar todos los usuarios de un servidor de bases de datos PostgreSQL desde el cliente psql, y cómo saber qué usuarios tienen acceso a una base de datos en particular.



Para listar todos los usuarios en un servidor de bases de datos PostgreSQL es necesario primero conectarse al mismo utilizando el cliente psql autenticándose como superusuario de la instancia (típicamente el usuario "postgres"). Por ejemplo, si se conecta localmente:

postgres@db:~$ psql -h localhost -p 5432 -U postgres

Al conectarse localmente típicamente se utiliza un socket Unix, con lo cual no es necesario introducir la contraseña del usuario "postgres" sino que se autentica con permisos Unix (habiendo iniciado una sesión local como "postgres" corriendo su postgres). De lo contrario cambiar "localhost" por el nombre de host del servidor de bases de datos y autenticar vía TCP con usuario y contraseña.

Para listar los usuarios de la instancia, psql cuenta con el comando \du:

postgres=# \du
                                List of roles
   Role name   |                         Attributes                         | Member of  
---------------+------------------------------------------------------------+------------
 postgres      | Superuser, Create role, Create DB, Replication, Bypass RLS | {}
 readonly      | Cannot login                                              +| {}
               | Password valid until infinity                              | 
 devel         | Cannot login                                              +| {}
               | Password valid until infinity                              | 
 usr_app       |                                                            | {devel}
 usr_dba       |                                                            | {devel}
 usr_developer |                                                            | {devel}
 usr_web       |                                                            | {devel}
 usr_www       |                                                            | {devel}

Este comando lista todos los usuarios con sus atributos y roles a los que pertenece. Si se agrega el caracter + muestra demás la descripción de cada usuario (si es que tiene).

Para saber qué usuarios tienen permisos de acceso sobre una base de datos en particular, basta con simplemente listar la base de datos utilizando el comando \l:

postgres=# \l website
                                    List of databases
  Name   |  Owner   | Encoding |   Collate   |    Ctype    |    Access privileges      
---------+----------+----------+-------------+-------------+-------------------------
 website | postgres | UTF8     | es_AR.UTF-8 | es_AR.UTF-8 | postgres=CTc/postgres  +
         |          |          |             |             | devel=CTc/postgres+
         |          |          |             |             | usr_www=Tc/postgres
(1 row)

Se observa que el rol "devel" y el usuario "postgres" poseen permisos de conexión y creación de tablas, mientras que el usuario "usr_www" sólo tiene permiso de conexión a la base de datos.

Para obtener ayuda sobre los subcomandos de psql disponibles, ejecutar \?.

Para más información sobre usuarios, bases de datos, tablas, roles y privilegios en PostgreSQL, revisar los artículos enlazados en las referencias a continuación.

Referencias


Tal vez pueda interesarte


Compartí este artículo