如何在PostgreSQL中编写一个可以获取用户,角色及其权限的查询[关闭]

zphenhs4  于 2023-06-29  发布在  PostgreSQL
关注(0)|答案(1)|浏览(144)

已关闭,此问题需要更focused。目前不接受答复。
**想改善这个问题吗?**更新问题,使其仅通过editing this post关注一个问题。

2天前关闭。
Improve this question
我需要编写一个PostgreSQL脚本,它可以获取数据库中的用户及其角色和权限。需要一个脚本,这将给予所有的特权(如选择,插入,更新,删除,截断,创建,触发器,执行),用户在数据库中
我有一个查询,但它没有给出适当的预期结果。

6xfqseft

6xfqseft1#

SELECT
  u.usename AS username,
  r.rolname AS role,
  array_agg(DISTINCT a.rolname) AS member_of,
  array_agg(DISTINCT p.grantor || ':' || p.privilege_type) AS privileges
FROM pg_user u
LEFT JOIN pg_auth_members m ON m.member = u.usesysid
LEFT JOIN pg_roles r ON r.oid = m.roleid
LEFT JOIN pg_auth_members am ON am.member = r.oid
LEFT JOIN pg_roles a ON a.oid = am.roleid
LEFT JOIN (
  SELECT
    grantee,
    grantor,
    privilege_type
  FROM information_schema.role_table_grants
  UNION ALL
  SELECT
    grantee,
    grantor,
    privilege_type
  FROM information_schema.role_column_grants
) p ON p.grantee = r.oid
WHERE u.usename NOT LIKE 'postgres' 
GROUP BY u.usename, r.rolname
ORDER BY u.usename;

这就是我在我的项目中使用的,通过在这个查询中添加COALESCE函数,特权将不再在结果集中显示为“null”

相关问题