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

如何更简洁地查看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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 05:49:10