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
- Cómo listar tablas y bases de datos en Postgres
- Roles y permisos en PostgreSQL
- Cómo listar los permisos sobre una tabla en Postgres