You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在PSQL/PGAdmin4中检查特定角色对指定Schema的权限?

替代的权限检查方法

1. 查询Schema级别的直接权限

使用PostgreSQL底层系统表pg_namespace和pg_privs,可以直接获取角色对Schema的USAGE、CREATE等权限,信息更完整:

SELECT
  n.nspname AS schema_name,
  r.rolname AS role_name,
  p.privilege_type,
  p.is_grantable
FROM
  pg_namespace n
JOIN
  pg_privs p ON n.oid = p.objoid
JOIN
  pg_roles r ON p.grantee = r.oid
WHERE
  r.rolname IN ('gerent','administratiu','metge','tecnic')
  AND n.nspname IN ('laboratori','administracio','clinica');

2. 查询Schema下表/视图的权限(含继承权限)

如果角色通过父角色继承了权限,information_schema.role_table_grants可能无法显示,这个查询可以包含所有权限(直接授予+继承):

SELECT
  n.nspname AS table_schema,
  c.relname AS table_name,
  r.rolname AS grantee,
  array_agg(DISTINCT p.privilege_type) AS privileges
FROM
  pg_class c
JOIN
  pg_namespace n ON c.relnamespace = n.oid
JOIN
  pg_privs p ON c.oid = p.objoid
JOIN
  pg_roles r ON p.grantee = r.oid
WHERE
  c.relkind IN ('r', 'v') -- 仅查询表和视图
  AND r.rolname IN ('gerent','administratiu','metge','tecnic')
  AND n.nspname IN ('laboratori','administracio','clinica')
GROUP BY
  n.nspname, c.relname, r.rolname;

3. 检查角色的权限继承关系

如果你的角色是某个父角色的成员,父角色的权限会被继承,这个查询可以查看角色从哪些父角色继承了Schema权限:

SELECT
  child.rolname AS role_name,
  parent.rolname AS inherited_from,
  n.nspname AS schema_name,
  p.privilege_type
FROM
  pg_auth_members am
JOIN
  pg_roles child ON am.member = child.oid
JOIN
  pg_roles parent ON am.roleid = parent.oid
JOIN
  pg_privs p ON parent.oid = p.grantee
JOIN
  pg_namespace n ON p.objoid = n.oid
WHERE
  child.rolname IN ('gerent','administratiu','metge','tecnic')
  AND n.nspname IN ('laboratori','administracio','clinica');

4. 使用psql元命令快速查看

如果你用psql客户端连接数据库,直接执行以下命令可以直观查看指定Schema下所有对象的权限:

\dp laboratori.* administratiu.* clinica.*

这个命令会输出每个表/视图的权限详情,包括各个角色拥有的权限以及是否可授予。

补充说明

information_schema.role_table_grants返回信息受限的原因通常是:该视图仅显示直接授予给目标角色的表权限,不包含通过角色组继承的权限;同时部分底层权限信息会被视图过滤,而使用pg_catalog下的系统表可以获取更完整的权限数据。

内容的提问来源于stack exchange,提问作者Berta A

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 10:43:15