通过组查询Redshift权限:关联用户组与组赋予的表查询权限
Redshift用户组关联表查询权限解决方案
简化用户-组关联查询
你原来的用户组关联语句可以简化,去掉冗余子查询:
SELECT usename, groname FROM pg_user pu JOIN pg_group pg ON pu.usesysid = ANY(pg.grolist)
关联组赋予的表查询权限
要获取用户通过对应组获得的SELECT权限表,核心思路是直接检查组对表的权限,再关联到所属用户。使用Redshift系统表和has_table_privilege函数实现:
SELECT pu.usename AS username, pg.groname AS group_name, pn.nspname AS schema_name, pc.relname AS table_name FROM pg_user pu JOIN pg_group pg ON pu.usesysid = ANY(pg.grolist) CROSS JOIN pg_class pc JOIN pg_namespace pn ON pc.relnamespace = pn.oid WHERE pc.relkind = 'r' -- 仅筛选普通表 AND has_table_privilege(pg.groname, pn.nspname || '.' || pc.relname, 'select') ORDER BY username, group_name, schema_name, table_name;
关键说明
pc.relkind = 'r':过滤出普通表,若需包含视图,可改为pc.relkind IN ('r', 'v')(v代表视图)has_table_privilege(pg.groname, ...):直接验证组对目标表的SELECT权限,用户继承组权限,因此能精准关联到该组赋予用户的查询权限- 可添加额外过滤条件,比如限定特定Schema:
AND pn.nspname = 'your_target_schema'
内容的提问来源于stack exchange,提问作者Robert Riley
相关产品推荐
相关产品推荐

