2012-01-19 6 views
35

Chcę uzyskać listę użytkowników dla pewnej bazy danych w psql - na przykład "template0". Kim są użytkownicy? Lub dla bazy danych "template1": - kim są użytkownicy?Lista użytkowników PostgreSQL

Już próbowałem:

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

Odpowiedz

71

użytkownika nie są w rzeczywistości, „na bazie”, są one dla klastra i podano różne uprawnienia dostępu do baz danych. Aby wyświetlić listę użytkowników, które powinien wykonać użytkownik \du, ale musisz być podłączony. Coś jak z linii poleceń powinno zrobić polecenie z wiersza poleceń. (lub \du z podpowiedzi psql po nawiązaniu połączenia z bazą danych).

+0

@ Michael, dziękuję za pomoc. –

+0

Nie ma za co. –

12

Musisz zrozumieć, że użytkownicy PostgreSQL to dla klastra bazy danych. @Michael już pokazuje, jak uzyskać listę tych.

Tak więc, o ile nie ograniczysz uprawnień dla konkretnych baz danych jawnie za pomocą REVOKE i GRANT, wszyscy użytkownicy w klastrze mają podstawowy dostęp do dowolnej bazy danych w klastrze.

Aby ustalić, czy określony użytkownik rzeczywiście ma pewien przywilej ('Connect') do bazy danych:

has_database_privilege(user, database, privilege) 

Więcej o privilege functions in the manual.

Aby określić wszystkie szczególne przywileje dla konkretnego bazie:

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

Otrzymasz NULL dla datacl jeśli stosuje się żadnych szczególnych ograniczeń.


Poza tym można ograniczyć dostęp do każdej bazy danych i na użytkownika w pliku pg_hba.conf. To na niższym poziomie. Użytkownik nie może się połączyć, jeśli nie pozwoli mu na to pg_hba.conf, nawet jeśli sama baza danych umożliwi dostęp.

+0

@ Erwin, @ Michael, dziękuję za pomoc. –

+2

Należy również zauważyć, że w najnowszych wersjach można nadawać/odwoływać uprawnienia CONNECT do db. –

3

Aby wyświetlić listę ról/użytkownika

wybierz rolname z pg_roles;