是否可以在数据库中任何模式的所有未来表上授予 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 - 授予对所有现有和未来数据库的读取访问权限的登录权限

ORA-00904 在对象表上授予选择后出错

授予数据库中的所有权限有啥作用?

在我的 PostGres 表上授予所有权限,但在尝试插入/选择时仍然收到“权限被拒绝”错误

在同义词和基础表上访问权限

在雪花任务上授予监视器