PostgreSQL用户列表

时间:2012-01-19 12:57:05

标签: postgresql privileges psql

我想获取psql中某个数据库的用户列表 - 例如“template0”。谁是用户?或者对于“template1”数据库: - 谁是那里的用户?

已经尝试过:

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

3 个答案:

答案 0 :(得分:74)

用户实际上不是“对于数据库”,它们用于群集,并且具有访问数据库的不同权限。要列出用户\du应该执行的操作,但您需要连接。像

这样的东西
psql template1 -c '\du'

从命令行提示符应该做。 (或者当您连接到数据库时,来自psql提示符\du )。

答案 1 :(得分:13)

您必须明白,在PostgreSQL中,用户每个数据库群集。 @Michael已经演示了如何获得这些列表。

因此,除非使用REVOKEGRANT明确限制特定数据库的权限,否则群集中的所有用户都可以基本访问群集中的任何数据库。

确定特定用户是否确实对数据库具有特定权限('CONNECT'):

has_database_privilege(user, database, privilege)

有关privilege functions in the manual的更多信息。

确定特定数据库的所有特定权限:

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

如果没有特定限制,则NULL获得datacl


除此之外,您还可以限制pg_hba.conf文件中每个数据库和每个用户的访问权限。那是在较低的水平。如果pg_hba.conf不允许他,即使数据库本身允许访问,用户也无法连接。

答案 2 :(得分:3)

列出角色/用户

从pg_roles中选择rolname;