是否可以在数据库中任何模式的所有未来表上授予 SELECT 权限?
Posted
技术标签:
【中文标题】是否可以在数据库中任何模式的所有未来表上授予 SELECT 权限?【英文标题】:Is it possible to grant SELECT on all future tables on any schema in a database? 【发布时间】:2020-08-27 13:28:28 【问题描述】:我正在尝试设置一个可以访问给定数据库中所有当前和未来表的 Snowflake 角色:
create role if not exists MYROLE;
grant usage on database MYDB to role MYROLE;
grant usage on all schemas in database MYDB to role MYROLE;
grant usage on future schemas in database MYDB to role MYROLE;
grant select on all tables in database MYDB to role MYROLE;
grant select on future tables in database MYDB to role MYROLE;
SHOW FUTURE GRANTS IN DATABASE MYDB;
确认有赠款:
created_on privilege grant_on name grant_to grantee_name grant_option
... USAGE SCHEMA MYDB.<SCHEMA> ROLE MYROLE false
... SELECT TABLE MYDB.<TABLE> ROLE MYROLE false
但它们似乎没有任何作用。
我有一个测试架构 MYDB.TEST
,当我创建具有其他角色 OTHERROLE
的表时,MYROLE
无法“看到”它们。
use role accountadmin;
grant select on all tables in database MYDB to role MYROLE;
grant select on future tables in database MYDB to role MYROLE;
use role otherrole;
CREATE OR REPLACE TABLE mydb.test.ruben_test AS (
SELECT * FROM (values (1,2),(3,4),(5,6)) x(id,value)
);
select * from mydb.test.ruben_test; -- OTHERROLE can see table
use role myrole;
select * from mydb.test.ruben_test; -- SQL compilation error: Object 'MYDB.TEST.RUBEN_TEST' does not exist or not authorized.
use role accountadmin;
grant select on all tables in database MYDB to role MYROLE;
use role myrole;
select * from mydb.test.ruben_test; -- now it can see it
grant select on future tables in database MYDB to role MYROLE;
似乎被忽略了。
如果我使用grant select on future tables in schema MYDB.TEST to role MYROLE;
,那么它会起作用,但我真的不想为数据库中的每个模式编写授权。
我正在使用 Snowflake 打开一个支持案例,但与此同时,是否可以在数据库中的所有未来表中获得授权?
【问题讨论】:
【参考方案1】:是的,这是可能的。您很可能在架构级别有未来的授权,这会阻止未来在数据库级别的授权运行,如 Precedence rule for future grants 中所述。
因为未来的授权可以在数据库和模式中定义 级别,架构级别的授权总是优先于 数据库级别的授权,雪花将忽略未来的授权 应用于数据库级别。即使用户尝试更改 数据库级别的未来授权和其中一个子模式具有 明确定义不同的未来授予,则此更改将不会 反映在架构级别,它将被简单地忽略而没有 显示任何错误。
【讨论】:
以上是关于是否可以在数据库中任何模式的所有未来表上授予 SELECT 权限?的主要内容,如果未能解决你的问题,请参考以下文章
SQL Server - 授予对所有现有和未来数据库的读取访问权限的登录权限