stored-procedures - 在雪花过程中动态切换角色
问题描述
我在雪花过程中有一个用例,其中我有两个具有不同角色的数据库。我想从一个存储过程将数据插入这两个数据库的表中。我在其中一个数据库中创建了过程,并且过程正在该数据库中插入数据,但是当我尝试在第二个数据库中插入时它说:
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'
那么任何建议如何在我的第二个数据库中插入与单个存储过程具有不同角色的数据?
解决方案
出于安全目的,您不能在存储过程中使用其他角色。但是,如果作为所有者,您希望调用者享有相同的特权,您始终可以使用所有者的权限创建特权,并且您不必在过程中进行任何明确的角色切换。
为此,您只需要包含“以所有者身份执行”子句即可。
有关来电者和所有者权利的更多信息,请参阅我们的文档
推荐阅读
- list - 有没有办法在循环之外初始化一个列表,它是否被删除并在飞镖中重用?
- linux - 如何解决错误“do_package: ... not shipping in any package”?
- php - REAL HOMES THEME 问题 array_filter, bool given
- php - 使用密码作为参数保护 PHP
- r - 如何在多次出现的模式上剪切子字符串?
- cakephp - 无法保存关联 (hasOne) 数据
- html - 如果背景图像放在另一个标签中,CSS mix-blend-mode 不起作用
- hive - hive 脚本由于堆空间问题而失败,无法处理太多分区
- sql - 同一个对象上带有键锁(UPDLOCK、ROWLOCK、HOLDLOCK)的 SQL 死锁
- r - 如何在 R 编程中为我的输出创建 csv