Snowflake cloud data platform Snowflake…Alter表在Snowflake中的托管架构中不工作

Snowflake cloud data platform Snowflake…Alter表在Snowflake中的托管架构中不工作,snowflake-cloud-data-platform,roles,Snowflake Cloud Data Platform,Roles,应用;雪花 数据库:test_dev_db 架构:test\u dev\u sch-->这是托管架构 架构所有者:dataadmin 表所有者:dba DBA角色已在模式TEST_dev_db.TEST_dev_SCH(所有者角色为DATAADMIN)中创建了表TEST,由于这是一个托管模式,表的所有者应为DATAADMIN,但所有者显示为DBA。 现在DBA想要修改表,它不允许DBA修改表,也不允许DATAADMIN修改表 SQL访问控制错误:对表操作的权限不足让我纠正一个误解: 由于这是一个

应用;雪花 数据库:test_dev_db 架构:test\u dev\u sch-->这是托管架构 架构所有者:dataadmin 表所有者:dba

DBA角色已在模式TEST_dev_db.TEST_dev_SCH(所有者角色为DATAADMIN)中创建了表TEST,由于这是一个托管模式,表的所有者应为DATAADMIN,但所有者显示为DBA。 现在DBA想要修改表,它不允许DBA修改表,也不允许DATAADMIN修改表
SQL访问控制错误:对表操作的权限不足让我纠正一个误解:

由于这是一个托管架构,表的所有者应该是 但是,所有者显示为DBA

不,不正确。所有者应该是您案例中的DBA角色。常规模式和托管模式之间的区别在于如何管理对象的权限:

在常规模式中,对象的所有者(即具有 对象的所有权特权)可以授予对象的进一步特权 他们的对象将转换为其他角色。在托管模式中,模式所有者 管理中对象的所有权限授予,包括将来的授予 模式。对象所有者保留对对象的所有权特权 物体;但是,只有架构所有者可以管理上的权限授予 物体

因此,DBA角色应该是表的所有者,但它不能管理表的权限。另一方面,角色DBA可以更改表

我试图重现这个问题,但正如我所见,一切都按预期进行:

use role accountadmin;
create database test_dev_db;
create schema TEST_DEV_SCH with MANAGED ACCESS;
create role dataadmin;
create role dba;
create role test_role; -- dummy role for testing

-- required grants for accessing DB
grant usage on database test_dev_db to dataadmin;
grant ownership on schema TEST_DEV_SCH to role dataadmin;

-- required grants for creating table, and accessing the schema
grant usage on database test_dev_db to dba;
grant usage, CREATE TABLE on schema TEST_DEV_SCH to dba;

-- required grants to switch these users
grant role dba to user gokhan;
grant role dataadmin to user gokhan;
现在我切换到角色DBA,创建一个新表,然后添加一个新列(用于测试是否可以更改表):

当我仍在使用角色DBA时,我将尝试将SELECT权限授予角色TEST_角色:

grant select on TEST to role TEST_ROLE; -- failed
use role dataadmin;

alter table TEST add column v2 variant; -- failed
SQL执行错误:未在托管访问架构中授权。使用架构所有者角色或具有管理授予权限的角色

正如预期的那样,它失败了。因此,我切换到角色DATAADMIN(托管架构的所有者),尝试更改表,然后将SELECT权限授予角色TEST_角色:

grant select on TEST to role TEST_ROLE; -- failed
use role dataadmin;

alter table TEST add column v2 variant; -- failed
SQL访问控制错误:权限不足,无法对表“TEST”进行操作

同样,正如预期的那样,架构的所有者不能更改表,但我们可以将SELECT权限授予另一个角色,因为我们是表的所有者:

use role dba;

create table TEST ( id number);

alter table TEST add column v variant; -- successful
grant select on TEST to role TEST_ROLE; -- successful

show grants on table TEST; 

+-----------+--------------+--------------+------------+
| privilege | grantee_name | grant_option | granted_by |
+-----------+--------------+--------------+------------+
| OWNERSHIP | DBA          | true         | DBA        |
| SELECT    | TEST_ROLE    | false        | DBA        |
+-----------+--------------+--------------+------------+

尽管角色DATAADMIN授予了SELECT权限,但它显示为“DBA”。

感谢您的详细回复。正如你所说,那是我的误解。我想更改表列的默认值,并认为托管模式和权限是问题所在

后来我意识到使用snowflake不能更改列的默认值。您只能将其更改为“顺序”


再次感谢大家的帮助。

您有我们可以用来复制的脚本吗?为什么不检查information_schema.table以查看所有权,并检查角色的显示授权,以验证操作角色是否具有授予他们的alter grant。如果没有,则更改或全部授予操作表的角色。