postgres:列出所有用户的角色授权

Mar*_*han 8 postgresql

我有一个审计要求来查询授予用户的所有角色;由用户列出。例如:

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.49.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)