我想在 psql 中获取某个数据库的用户列表 - 例如“template0”。用户是谁?或者对于“template1”数据库: - 那里的用户是谁?
已经尝试过:
\du+ -- no database is Listed not Users
Select * from "pg_users"; -- no database is listed
我想在 psql 中获取某个数据库的用户列表 - 例如“template0”。用户是谁?或者对于“template1”数据库: - 那里的用户是谁?
已经尝试过:
\du+ -- no database is Listed not Users
Select * from "pg_users"; -- no database is listed
用户实际上不是“用于数据库”,它们用于集群并被授予访问数据库的不同权限。列出用户\du
应该做的,但你需要连接。就像是
psql template1 -c '\du'
从命令行提示符应该做。(或连接到数据库时\du
从 psql 提示符)。
您必须了解,在 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
即使数据库本身允许访问,用户甚至无法连接,如果不允许他的话。
列出角色/用户
从 pg_roles 中选择 rolname;