PostgreSQL用户列表

Aru*_*bal 39 postgresql privileges psql

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

已经尝试过:

\du+  -- no database is Listed not Users
Select * from "pg_users";  -- no database is listed
Run Code Online (Sandbox Code Playgroud)

Mic*_*ker 77

用户实际上并不是"对于数据库",它们用于群集,并且具有访问数据库的不同权限.要列出用户\du应该这样做,但您需要连接.就像是

psql template1 -c '\du'
Run Code Online (Sandbox Code Playgroud)

从命令行提示应该做.(或者在连接到数据库时\du从psql提示符).


Erw*_*ter 13

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

因此,除非使用REVOKE和显式限制特定数据库的权限,否则GRANT群集中的所有用户都可以基本访问群集中的任何数据库.

要确定特定用户是否确实拥有数据库的特定权限('CONNECT'):

has_database_privilege(user, database, privilege)
Run Code Online (Sandbox Code Playgroud)

有关手册中的权限功能的更多信息.

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

SELECT datname, datacl
FROM   pg_database
WHERE  datname = 'mydb';
Run Code Online (Sandbox Code Playgroud)

你得到NULLdatacl,如果没有具体的限制.


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

  • 另请注意,在最新版本中,您可以向db发送/撤消CONNECT权限. (2认同)

Sac*_*pta 5

列出角色/用户

从 pg_roles 中选择 rolname;