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

为何Snowflake角色r2可删除无权限的数据库db1?

问题

用户在Snowflake中执行了如下操作:

-- current user (accountadmin): rsahu 
use role useradmin;
create role r1;

use role useradmin;
create role r2;

use role useradmin;
grant role r1 to user rsahu;
grant role r2 to user rsahu;

use role sysadmin;
grant create database on account to role r1;

use role r1;
create database db1;
show grants on database db1; -- ownership by r1

use role r2;
drop database db1; -- success, how?

用户rsahu已被授予角色:accountadmin, useradmin, sysadmin, securityadmin, r1 和 r2。明明角色r2没有数据库db1的任何权限,为何切换到r2执行删除语句却成功了?

解答

这是因为Snowflake的角色权限是叠加生效的,USE ROLE命令只是设置当前"活跃"的角色,并不会禁用用户已被授予的其他角色。

用户rsahu本身拥有多个高权限角色:

  • accountadmin是Snowflake的最高权限角色,对所有资源拥有完全管理权限,包括删除数据库;
  • sysadmin负责账户内所有数据仓库、数据库等对象的管理,具备删除数据库的权限;
  • r1是db1的所有者,天然拥有删除该数据库的权限。

当切换到r2角色时,上述高权限角色依然处于启用状态,删除操作会自动使用这些角色的权限完成验证,因此执行成功。

你可以通过执行SHOW ROLES;命令查看当前启用的所有角色,会发现除了r2之外,其他被授予的高权限角色也在启用列表中。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 00:59:57