微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在具有所有者权限的过程中运行雪花副作用功能,例如SYSTEM $ GENERATE_SCIM_ACCESS_TOKEN?

如何解决如何在具有所有者权限的过程中运行雪花副作用功能,例如SYSTEM $ GENERATE_SCIM_ACCESS_TOKEN?

有许多这样的命令,它们仅在调用者的上下文中而不是在所有者的上下文中运行(例如,诸如Show Tables之类的Show命令)。

以下kb文章详细记录了主叫权与所有者权支持内容

https://docs.snowflake.com/zh-CN/sql-reference/stored-procedures- rights.html

从最终用户的角度来看,这里的要求是合理的。因此,您可以通过在SNowflake支持下提出案例或在SNowflake的Idea门户上提出想法来向SNowflake提出改进请求:https
//community.snowflake.com/s/ideas

解决方法

基本上我想在雪花中进行SCIM集成。为此,我必须使用此命令来获取将传递给Azure AD的令牌:

call system$generate_scim_access_token('<value>');

该命令只能与AccountAdmin一起运行。并使用AccountAdmin运行它,我可以获取令牌,但是以后我将不再具有AccountAdmin的权限,因此,为此,我使用AccountAdmin创建了一个过程并将其作为所有者执行。这样,当拥有该过程使用权限的任何其他角色调用此过程时,它将以AccountAdmin权限执行(因为它是使用AccountAdmin创建的),因此在该过程中,我可以运行system
$ generate_scim_access_token(’‘) ; 并返回结果:

Create or Replace Procedure DB.mySchema.GenerateScimAccessToken()
 RETURNS string
 LANGUAGE javascript
 execute as owner
 AS
 $$
   var stmt = snowflake.createStatement( {sqlText: "select system$generate_scim_access_token('<value>');"} );
   var resultSet = stmt.execute();

   // moving pointer to row.
   resultSet.next();

   // returning column value
   return resultSet.getColumnValue(1);
 $$

但是,每当我称呼它时,都会给我这个错误:

Execution error in store procedure GENERATESCIMACCESSTOKEN: SQL compilation error: Query called from a stored procedure contains a function with side effects [SYSTEM$GENERATE_SCIM_ACCESS_TOKEN]. At Statement.execute,line 3 position 24

基本上,它说该过程具有副作用功能(SCIM是副作用功能),并且以所有者权限运行它会产生例外(雪花在具有所有者权限的过程中运行副作用功能必须受到限制)。如果我们使用调用程序来运行它,它可以正常运行,但是我们想使用所有者来运行它。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。