在 Snowflake 中,“加载表”功能是不是需要由执行加载的同一用户/角色创建目标表?
Posted
技术标签:
【中文标题】在 Snowflake 中,“加载表”功能是不是需要由执行加载的同一用户/角色创建目标表?【英文标题】:In Snowflake, does "Load Table" functionality require target table to be created by the same user/role that does the load?在 Snowflake 中,“加载表”功能是否需要由执行加载的同一用户/角色创建目标表? 【发布时间】:2020-02-26 08:37:43 【问题描述】:我们已经定义了一个 MANUAL 模式,我们希望在其中创建由用户通过 web ui 表 >> 表 >> 加载表功能“手动”加载的表。
DDL 部分应该由 dba 完成,但是当需要更改数据时,相应的用户可以进行更改。
然后我们有了架构、角色和用户、示例“DUMMY”表、准备好的文件格式 (CSV)(全部由 dba 定义),然后手动加载用户被授予对表的 DML 权限。但随后表加载失败:
There was an error while trying to stage "DUMMY.csv".
Reason: SQL access control error: Insufficient privileges to operate on table stage 'DUMMY'
那么我们能否以某种方式将表阶段授予手动加载角色/用户?或者我们需要授予 DDL 权限,以便表需要由向其中加载数据的同一用户创建?
【问题讨论】:
【参考方案1】:正如我所见,不可能在 table stage 上授予任何特权。 如果我错了,请有人纠正我!
作为一种解决方法,您可以撤销角色的现有权限,然后更改表的所有权:
revoke all on table DUMMY from role MANUAL_ROLE;
grant ownership on table DUMMY to role MANUAL_ROLE;
我假设您具有分配给用户的名为 MANUAL_ROLE 的角色。
【讨论】:
【参考方案2】:在 Snowflake 托管阶段试试这个:
grant read on stage DUMMY to role MANUAL_ROLE;
grant write on stage DUMMY to role MANUAL_ROLE;
仅当阶段不是 Snowflake Managed 类型并且连接到 AWS、Azure 或 GCP 上的非 Snowflake 存储位置时:
grant usage on stage DUMMY to role MANUAL_ROLE;
【讨论】:
以上是关于在 Snowflake 中,“加载表”功能是不是需要由执行加载的同一用户/角色创建目标表?的主要内容,如果未能解决你的问题,请参考以下文章
在 Snowflake 中,调整现有仓库的大小是不是有助于提高正在运行的查询的性能?
Snowflake 中是不是有办法允许用户在程序上获取 ddl 但没有使用或所有权权限?
运行队列如何在 Snowflake 中工作?是不是有概念时间片?