如何在拥有所有者权限的过程中运行snowflake的副作用函数,如system$generate\u scim\u access\u token?

vd2z7a6w  于 2021-07-24  发布在  Java
关注(0)|答案(1)|浏览(323)

基本上我想在snowflake中集成scim。为此,我必须使用此命令获取将传递给azure ad的令牌:

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

此命令只能与accountadmin一起运行。运行它与accountadmin我可以得到令牌,但在未来我将没有accountadmin的权利,所以我做了什么,我创建了一个过程与accountadmin和执行它作为所有者。因此,当任何具有此过程使用权限的其他角色调用此过程时,它将使用accountadmin权限执行(因为它是用accountadmin创建的),因此在该过程中,我可以运行系统$generate\u scim\u access\u 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是一个副作用函数),用所有者权限运行它就是一个例外(在有所有者权限的过程中运行副作用函数必须有snowflake的限制)。如果我们用调用者运行它,它运行得很好,但我们想用所有者运行它。

yiytaume

yiytaume1#

有许多这样的命令只在调用者的上下文中运行,而不是在所有者的上下文中运行(例如show tables之类的show命令)。
以下知识库文章详细介绍了呼叫者权限与所有者权限中支持的内容:
https://docs.snowflake.com/en/sql-reference/stored-procedures-rights.html
从最终用户的Angular 来看,这里的要求是合理的。因此,您可以通过使用snowflake支持提出案例或在snowflake的创意门户上提出创意,向snowflake提出改进请求:https://community.snowflake.com/s/ideas

相关问题