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

如何查询Redshift中表绑定角色、用户所属角色及角色权限?

Redshift Serverless 角色权限查询方案

问题原因

你遇到的报错和空结果问题来自三个原因:

  • 你查询的pg_role是错误的对象名,Redshift中存储角色元数据的系统视图为pg_roles
  • svv_roles、svv_user_grants等svv_*前缀的Redshift专属系统视图,默认仅工作区初始管理员用户有查询权限,普通用户未被授权时直接查询会返回permission denied错误
  • information_schema.role_table_grants是PostgreSQL兼容视图,仅返回当前查询用户被直接授予的权限,不包含角色继承的权限,也不展示其他用户/角色的权限,因此普通用户查询时大概率返回空结果。

前置操作

使用Redshift Serverless工作区创建时指定的初始管理员账号登录,给需要查询权限的业务用户授予系统视图的查询权限:

-- 将下方的<query_username>替换为实际用来执行查询的用户名
GRANT SELECT ON svv_roles TO <query_username>;
GRANT SELECT ON svv_user_grants TO <query_username>;
GRANT SELECT ON svv_role_grants TO <query_username>;
GRANT SELECT ON svv_table_privileges TO <query_username>;

各场景查询SQL

1. 查询用户-角色绑定关系

授权后执行以下SQL,可获取所有用户关联的角色、是否具备角色管理员权限:

SELECT
  user_name,
  role_name,
  admin_option
FROM svv_user_grants;

如果存在角色嵌套授权(比如将角色A授予角色B),可通过以下SQL查询角色间的绑定关系:

SELECT
  role_name AS granted_child_role,
  grantee_name AS parent_role,
  admin_option
FROM svv_role_grants
WHERE grantee_type = 'ROLE';

2. 查询角色-表绑定关系及对应操作权限

通过svv_table_privileges视图可查询所有角色、用户被授予的表级权限,包含SELECT、UPDATE、INSERT、DELETE等所有操作类型:

SELECT
  grantee_name AS auth_subject,
  grantee_type, -- 字段值为ROLE/USER,可用来筛选主体类型
  table_schema,
  table_name,
  privilege_type -- 对应具体权限:SELECT/UPDATE/INSERT/DELETE/REFERENCES/TRUNCATE等
FROM svv_table_privileges
-- 仅查询角色的权限就保留下方筛选条件,要查用户权限就将值改为'USER'
WHERE grantee_type = 'ROLE';

如果需要查询指定角色的表权限,新增筛选条件即可:

SELECT
  table_schema,
  table_name,
  privilege_type
FROM svv_table_privileges
WHERE grantee_type = 'ROLE'
  AND grantee_name = '替换为你要查询的目标角色名';

补充说明:不建议使用pg_roles做权限盘点,该视图仅展示当前用户可感知的角色元数据,无法返回全量角色权限信息,优先使用svv_*系列视图查询结果更准确。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 18:39:35