为何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
相关产品推荐
相关产品推荐

