我有一个审计要求来查询授予用户的所有角色;由用户列出。例如:
Username Roles
user1 role1_rw, role2_ro, rol3_rw
user2 role2_rw
Run Code Online (Sandbox Code Playgroud)
我不能使用 psql 元命令,因为此结果集将与其他一些查询合并以进行授权分析。已创建角色以管理对各种应用程序模式的 ro/rw 访问。在 oracle 中,这很简单;我没有看到在 Postgres 中返回这个的单一视图。查询用户是超级用户。
有没有人有查询要返回这个?Ubuntu 上的 Postgres 9.4
小智 12
您可以通过psql
选项查看使用客户端的用户\du+
(如@dezso 已经解释过)。
但是,如果您愿意,可以在 上进行查询pg_roles
,例如:
SELECT
r.rolname,
r.rolsuper,
r.rolinherit,
r.rolcreaterole,
r.rolcreatedb,
r.rolcanlogin,
r.rolconnlimit, r.rolvaliduntil,
ARRAY(SELECT b.rolname
FROM pg_catalog.pg_auth_members m
JOIN pg_catalog.pg_roles b ON (m.roleid = b.oid)
WHERE m.member = r.oid) as memberof
, r.rolreplication
, r.rolbypassrls
FROM pg_catalog.pg_roles r
ORDER BY 1;
Run Code Online (Sandbox Code Playgroud)
请查看文档以获取更多详细信息:https : //www.postgresql.org/docs/current/static/user-manag.html
小智 7
塞巴斯蒂安的回答+1 。
我没有资格发表评论,但我也想回答 RonJohn 的问题。 rolbypassrls
在 postgresql 版本中引入9.5
。您可以通过比较pg_roles
版本9.4和9.5之间的文档页面来看到这一点。(您可能还注意到其他差异已rolcatupdate
被删除)
以下是 Sebastion 的代码片段,针对缺失的列进行了简单调整:
SELECT
r.rolname,
r.rolsuper,
r.rolinherit,
r.rolcreaterole,
r.rolcreatedb,
r.rolcanlogin,
r.rolconnlimit, r.rolvaliduntil,
ARRAY(SELECT b.rolname
FROM pg_catalog.pg_auth_members m
JOIN pg_catalog.pg_roles b ON (m.roleid = b.oid)
WHERE m.member = r.oid) as memberof
, r.rolreplication
FROM pg_catalog.pg_roles r
ORDER BY 1;
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
34623 次 |
最近记录: |