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)
你得到NULL
的datacl
,如果没有具体的限制.
除此之外,您还可以限制pg_hba.conf
文件中每个数据库和每个用户的访问权限.那是在较低的水平.pg_hba.conf
即使数据库本身允许访问,用户也无法连接,如果不让他.