2012-01-19 13 views
35

Desidero ottenere un elenco di utenti per un determinato database in psql, ad esempio "template0". Chi sono gli utenti? O per il database "template1": - chi sono gli utenti lì?Elenco utenti PostgreSQL

già provato:

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

risposta

71

Utente non sono in realtà, "per il database", sono per cluster e sono date le autorizzazioni diverse per accedere ai database. Per elencare gli utenti, è necessario eseguire \du, ma è necessario essere connessi. Qualcosa come

psql template1 -c '\du' 

dal prompt della riga di comando dovrebbe fare. (oppure \du dal prompt di psql quando si è connessi al database).

+0

@ Michael, grazie mille per l'aiuto. –

+0

Prego. –

12

È necessario comprendere che gli utenti di PostgreSQL sono per il cluster di database. @Michael già dimostra come ottenere una lista di quelli.

Quindi, a meno che non si limitino esplicitamente le autorizzazioni per un determinato database con REVOKE e GRANT, tutti gli utenti nel cluster dispongano di un accesso di base a qualsiasi database nel cluster.

Per determinare, se un determinato utente ha in realtà un certo privilegio ('CONNECT') per un database:

has_database_privilege(user, database, privilege) 

più su privilege functions in the manual.

Per determinare tutti i privilegi specifici per una specifica banca dati :

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

Si ottiene NULL per datacl se si applicano restrizioni specifiche.


In aggiunta a ciò è possibile limitare l'accesso al database e per utente nel file pg_hba.conf. Questo è a un livello più basso. L'utente non può nemmeno connettersi, se pg_hba.conf non glielo consente, anche se il database stesso consentirebbe l'accesso.

+0

@ Erwin, @ Michael, grazie mille per l'aiuto. –

+2

Inoltre, nelle versioni recenti è possibile concedere/revocare i privilegi CONNECT ai db. –

3

Per elencare i ruoli/utenti

selezionare rolname da pg_roles;

Problemi correlati