为什么默认情况下,Snowflake中的FUTURE授予需要AccountAdmin?

时间:2019-12-23 19:19:45

标签: snowflake-data-warehouse

我设置了以下情况:

Demo_DB由sysadmin角色拥有。 Demo_Schema已创建,并由Demo_Developer角色拥有。 Demo_Schema中的所有对象均由Demo_Developer角色拥有并创建。

AccountAdmin创建了一个名为Demo_Analyst的新角色,其目的是将其设置为Demo_Schema表的只读用户。 Demo_Developer成功执行了以下授予(假设因为它是Demo_Schema中所有表的所有者):

use role Demo_Developer; 
grant select on all tables in schema Demo_DB.Demo_Schema to role Demo_Analyst;

但是,Demo_Developer或事件SysAdmin(属于Demo_Developer角色)都不能执行以下操作:

use role sysadmin;
grant select on FUTURE tables in schema Demo_DB.Demo_Schema to role Demo_Analyst;

但是,以上操作将使用AccountAdmin角色执行。一开始这对我来说似乎很奇怪,但是后来我推断也许我们不知道哪个所有者将创建哪个将来的表,所以我们需要一个AccountAdmin来授予FUTURE的权限。正确吗?

我做了一些测试,并将Demo_Schema中一个表的所有权更改为与Demo_Developer无关的完全不同的角色。然后,我尝试再次使用该Demo_Developer授予所有表上的select权限(上面的第一条语句),这一次它没有授予所有表,而是仅授予表Demo_Developer是所有者。

所以我想知道为什么对FUTURE表的尝试授予不能以相同的方式工作-即对将来授予的授予者拥有的将来表进行授予选择。

所以我的问题是:为什么我需要AccountAdmin来授予Future表上的选择,但是我可以使用所有者角色(Demo_Developer)来授予所有当前表上的选择?

1 个答案:

答案 0 :(得分:1)

您在使用说明中看到了吗?

需要MANAGE GRANTS全局特权才能在数据库级别授予或撤消对将来对象的特权。默认情况下,只有SECURITYADMIN和ACCOUNTADMIN角色具有MANAGE GRANTS特权。