如何更简洁地查看Snowflake指定数据库下所有Schema的权限?
一次性获取指定数据库下所有Schema的权限
我完全懂你那种逐个查Schema权限再手动合并的痛苦——确实太繁琐了!其实Snowflake提供了更直接的方案,利用系统视图就能一次性拿到指定数据库下所有Schema的权限信息,根本不用反复执行SHOW GRANTS和result_scan。
推荐方案:使用INFORMATION_SCHEMA.SCHEMA_PRIVILEGES系统视图
Snowflake的INFORMATION_SCHEMA.SCHEMA_PRIVILEGES视图已经预存了所有Schema的权限数据,你只需要针对目标数据库查询这个视图即可:
SELECT grantee_name, -- 被授权的用户/角色名称 privilege_type, -- 授予的权限类型(比如SELECT、USAGE等) schema_name, -- Schema名称 grantor_name, -- 授权者名称 granted_on, -- 授权对象类型(这里固定为SCHEMA) grant_option -- 是否允许被授权者再转授权限 FROM "TEST_DB".INFORMATION_SCHEMA.SCHEMA_PRIVILEGES ORDER BY schema_name, grantee_name;
为什么这个方案更好?
- 无需手动批量执行命令:不用一个个对每个Schema跑
SHOW GRANTS,一次查询搞定所有 - 结果结构化:返回的是标准的表格数据,方便你直接筛选、排序或者导出
- 信息更全面:除了权限本身,还能看到授权者、是否有转授权等额外信息
扩展:如果需要包含角色继承的权限
如果你还想看到通过角色继承获得的Schema权限,可以结合INFORMATION_SCHEMA.APPLICABLE_ROLES视图来关联查询,比如:
SELECT u.username AS user_name, r.role_name, sp.privilege_type, sp.schema_name FROM "TEST_DB".INFORMATION_SCHEMA.SCHEMA_PRIVILEGES sp JOIN "TEST_DB".INFORMATION_SCHEMA.APPLICABLE_ROLES ar ON sp.grantee_name = ar.role_name JOIN "TEST_DB".INFORMATION_SCHEMA.USERS u ON ar.grantee_name = u.username ORDER BY u.username, sp.schema_name;
这个查询会把用户通过角色继承得到的Schema权限也一并展示出来,适合需要完整权限图谱的场景。
内容的提问来源于Stack Exchange,提问作者Will
相关产品推荐
相关产品推荐

