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

Snowflake新建TEST_ROLE无显式权限却能查询数据表?

Snowflake新建角色可查询表的原因解释

核心原因:默认权限继承机制

Snowflake的权限体系存在两个关键默认行为,导致你遇到的现象:

  1. PUBLIC角色的默认对象权限
    创建数据库、模式、表时,Snowflake会默认将以下权限授予PUBLIC角色(除非创建时显式使用WITH MANAGE GRANTS参数修改默认规则):

    • 数据库:USAGE权限(允许访问数据库)
    • 模式:USAGE权限(允许访问模式下的对象)
    • 表:SELECT权限(允许查询表数据)
      你看到SHOW GRANTS TO ROLE PUBLIC仅显示部分权限,是因为该命令默认只展示直接授予的账户级权限,需用更精准的命令查看对象级权限:
    -- 查看PUBLIC对目标数据库的权限
    SHOW GRANTS ON DATABASE RESTRICTED_DB_TEST TO ROLE PUBLIC;
    -- 查看PUBLIC对目标模式的权限
    SHOW GRANTS ON SCHEMA RESTRICTED_DB_TEST.TEST_SCHEMA TO ROLE PUBLIC;
    -- 查看PUBLIC对目标表的权限
    SHOW GRANTS ON TABLE RESTRICTED_DB_TEST.TEST_SCHEMA.TEST_TBL TO ROLE PUBLIC;
    

    执行后会确认PUBLIC确实拥有上述对象的必要权限。

  2. 所有新建角色默认继承PUBLIC权限
    Snowflake中,所有自定义角色都是PUBLIC角色的子角色,默认会继承PUBLIC的全部权限。SHOW GRANTS TO ROLE TEST_ROLE仅显示直接授予该角色的权限,不会展示从父角色(PUBLIC)继承的权限,因此返回空结果,但角色实际拥有继承的查询权限。

补充说明

无论使用ACCOUNTADMIN还是SYSADMIN创建对象,只要未修改默认权限规则,都会触发上述默认授权行为,因此新建角色和PUBLIC角色都能查询目标表。若要限制访问,需在创建对象时添加WITH MANAGE GRANTS,或事后撤销PUBLIC对数据库、模式、表的对应权限。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 05:38:12