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