【问题标题】:Switching roles Dynamically in snowflake procedure在雪花过程中动态切换角色
【发布时间】:2020-08-03 07:10:41
【问题描述】:

我在雪花过程中有一个用例,其中我有两个具有不同角色的数据库。我想从一个存储过程将数据插入这两个数据库的表中。我在其中一个数据库中创建了过程,并且过程正在该数据库中插入数据,但是当我尝试在第二个数据库中插入时,它说:

SQL compilation error: Database 'SecondDB' does not exist or not authorized.

然后我尝试在过程中插入第二个数据库之前使用查询来更改角色,如下所示:

var SwitchToLoader = "use role SecondDbRole";
try {
snowflake.execute 
(
     {sqlText: SwitchToLoader}
);
}
catch (err)  {
     return "Failed: " + err;  
}

这仍然给我错误:

SQL access control error: Insufficient privileges to operate on role 'SecondDbRole'

那么任何建议如何在我的第二个数据库中插入与单个存储过程具有不同角色的数据?

【问题讨论】:

    标签: stored-procedures snowflake-cloud-data-platform snowflake-schema


    【解决方案1】:

    出于安全考虑,您不能在存储过程中使用其他角色。但是,如果作为所有者,您希望调用者享有相同的特权,您始终可以使用所有者的权限创建特权,并且您不必在过程中进行任何明确的角色切换。

    您只需要包含子句“以所有者身份执行”即可。

    有关来电者和所有者权利的更多信息,请参阅我们的文档

    https://docs.snowflake.net/manuals/sql-reference/stored-procedures-usage.html#choosing-between-owner-s-rights-and-caller-s-rights

    【讨论】:

    • 我在程序中添加了“以所有者身份执行”子句,但这在我的情况下不起作用。无论如何,我为两个数据库设置了相同的角色来解决问题。
    猜你喜欢
    • 1970-01-01
    • 2021-06-22
    • 2020-07-14
    • 2021-01-04
    • 2021-05-12
    • 2020-05-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多