Подтвердить что ты не робот

Список пользователей PostgreSQL

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

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

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

Ответ 1

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

psql template1 -c '\du'

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

Ответ 2

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

Итак, если вы не ограничиваете разрешения для конкретных баз данных явно 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 не позволит ему, даже если сама база данных разрешит доступ.

Ответ 3

Перечислить роли/пользователя

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