Список пользователей PostgreSQL
Я хочу получить список пользователей для определенной базы данных в psql - например, "template0". Кто является пользователями? Или для базы данных "template1": - Кто там есть?
Уже пробовал:
\du+ -- no database is Listed not Users
Select * from "pg_users"; -- no database is listed
Ответы
Ответ 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;