首页 > 解决方案 > 在雪花过程中动态切换角色

问题描述

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

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-proceduressnowflake-cloud-data-platformsnowflake-schema

解决方案


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

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

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

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


推荐阅读