Myl*_*les 2 postgresql permissions
如何查看用户的 CONNECT 等数据库级别权限?
我已经找到了两种方法,但都不是完美的:
使用功能has_database_privilege()
。
这可行,但我必须为每个用户一一手动运行它:
SELECT has_database_privilege('david', 'postgres', 'connect');
Run Code Online (Sandbox Code Playgroud)
这似乎返回了不完整的结果。它NULL
首先返回,但david
其他用户仍然可以连接到postgres
数据库。仅当我在该数据库上运行任何GRANT
命令(当然还有REVOKE
)之后,该表才会填充一些结果:{=Tc/postgres,postgres=CTc/postgres}
。所以我想我每次使用这种方法之前都必须GRANT
这样做?REVOKE
SELECT datname as "Relation",
datacl as "Permissions"
FROM pg_database
WHERE datname = 'postgres';
Run Code Online (Sandbox Code Playgroud)
在 Ubuntu 上使用 PostgreSQL 10.9
小智 5
您可以将该函数用作检索所有用户的选择的一部分:
SELECT rolname, has_database_privilege(rolname, 'postgres', 'connect')
from pg_roles
where rolcanlogin;
Run Code Online (Sandbox Code Playgroud)
您可以扩展它,为每个数据库中的每个用户显示此信息:
select db.datname, r.rolname, has_database_privilege(r.rolname, db.datname, 'connect')
from pg_roles r
cross join pg_database db
where r.rolcanlogin
and db.datallowconn
order by db.datname, r.rolname;
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
5872 次 |
最近记录: |