2012-01-19 20 views
35

Deseo obtener una lista de usuarios para una determinada base de datos en psql, por ejemplo, "template0". ¿Quiénes son los usuarios? O para la base de datos "template1": - ¿quiénes son los usuarios allí?Lista de usuarios de PostgreSQL

bastante bueno en:

\du+ -- no database is Listed not Users 
Select * from "pg_users"; -- no database is listed 

Respuesta

71

usuario no son en realidad "para la base de datos", que son para el grupo y se les da diferentes permisos de acceso a bases de datos. Para enumerar los usuarios \du debería hacerlo, pero debe estar conectado. Algo así como

psql template1 -c '\du' 

del prompt de la línea de comando debería hacer. (o \du desde el indicador psql cuando está conectado a la base de datos).

+0

@ Michael, muchas gracias por la ayuda. –

+0

De nada. –

12

Debe comprender que en PostgreSQL los usuarios son por grupo de base de datos. @Michael ya demuestra cómo obtener una lista de esos.

Por lo tanto, a menos que restrinja explícitamente los permisos para bases de datos específicas con REVOKE y GRANT, todos los usuarios del clúster tienen acceso básico a cualquier base de datos del clúster.

Para determinar, si un usuario específico en realidad tiene un cierto privilegio ('CONNECT') para una base de datos:

has_database_privilege(user, database, privilege) 

Más sobre privilege functions in the manual.

Para determinar todos los privilegios específicos para una base de datos específica :

SELECT datname, datacl 
FROM pg_database 
WHERE datname = 'mydb'; 

Se obtiene NULL para datacl si no se aplica ninguna restricción específica.


Además de que puede restringir el acceso por base de datos y por usuario en el archivo pg_hba.conf. Eso está en un nivel inferior. El usuario no puede ni siquiera conectarse, si pg_hba.conf no lo permite, incluso si la base de datos en sí permitiría el acceso.

+0

@ Erwin, @ Michael, muchas gracias por la ayuda. –

+2

También tenga en cuenta que, en versiones recientes, puede otorgar/revocar privilegios CONNECT a db's. –

3

Para una lista Roles/usuario

seleccione rolname de pg_roles;

Cuestiones relacionadas