【发布时间】:2019-12-23 19:19:45
【问题描述】:
我设置了以下场景:
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 授予对所有表的选择权限(上面的第一条语句),这一次它没有授予所有表,而只是授予 Demo_Developer 是其所有者的表。
所以我想知道为什么对 FUTURE 表的尝试授予不会以相同的方式工作 - 即在未来授予的授予者拥有的未来表上授予选择。
所以我的问题是:为什么我需要 AccountAdmin 来授予对 Future 表的选择权限,但我可以使用所有者角色 (Demo_Developer) 来授予对所有当前表的选择权限?
【问题讨论】:
标签: snowflake-cloud-data-platform