1

基本上我想在雪花中进行 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 是一种副作用功能)并且以所有者权限运行它会给出异常(雪花必须限制在具有所有者权限的过程中运行副作用功能)。如果我们用调用者运行它,它运行良好,但我们想用所有者运行它。

4

1 回答 1

2

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

以下 kb 文章中记录了调用者权利与所有者权利中支持的内容的详细说明:

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

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

于 2020-07-14T13:58:29.850 回答