Список пользователей PostgreSQL - PullRequest
39 голосов
/ 19 января 2012

Я хочу получить список пользователей для определенной базы данных в psql - например, "template0".Кто пользователи?Или для базы данных "template1": - кто там пользователи?

Уже пробовал:

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

Ответы [ 3 ]

76 голосов
/ 19 января 2012

Пользователь на самом деле не «для базы данных», он для кластера и ему предоставляются различные права доступа к базам данных. Чтобы составить список пользователей \du следует сделать, но вам необходимо подключиться. Что-то вроде

psql template1 -c '\du'

из командной строки должен сделать. (или \du из приглашения psql при подключении к базе данных ).

13 голосов
/ 19 января 2012

Вы должны понимать, что в PostgreSQL пользователи составляют на кластер базы данных . @ Майкл уже демонстрирует, как получить их список.

Таким образом, если вы не ограничите разрешения для конкретных баз данных явно с помощью REVOKE и GRANT, все пользователи в кластере имеют базовый доступ к любой базе данных в кластере.

Чтобы определить, имеет ли конкретный пользователь определенную привилегию ('CONNECT') для базы данных:

has_database_privilege(user, database, privilege)

Подробнее о привилегированных функциях в руководстве .

Чтобы определить все определенные привилегии для конкретной базы данных :

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

Вы получаете NULL за datacl, если не применяются особые ограничения.


В дополнение к этому вы можете ограничить доступ для базы данных и для пользователя в файле pg_hba.conf. Это на более низком уровне. Пользователь даже не сможет подключиться, если pg_hba.conf не разрешит ему, даже если сама база данных разрешит доступ.

4 голосов
/ 23 августа 2017

Для списка ролей / пользователь

выберите rolname из pg_roles;

...