基本上我想在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的限制)。如果我们用调用者运行它,它运行得很好,但我们想用所有者运行它。
1条答案
按热度按时间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