如何在具有所有者权限的过程中 运行 像 SYSTEM$GENERATE_SCIM_ACCESS_TOKEN 这样的雪花副作用函数?
How to run snowflake side effect functions like SYSTEM$GENERATE_SCIM_ACCESS_TOKEN within a procedure with owner rights?
基本上我想在雪花中做 SCIM 集成。为此,我必须使用此命令获取将传递给 Azure AD 的令牌:
call system$generate_scim_access_token('<value>');
此命令只能 运行 与 AccountAdmin 一起使用。 运行将其与 AccountAdmin 结合使用,我可以获得令牌,但将来我将没有 AccountAdmin 的权限,因此为此,我使用 AccountAdmin 创建了一个过程并以所有者身份执行它。因此,当拥有此过程使用权限的任何其他角色调用此过程时,它将以 AccountAdmin 权限执行(因为它是使用 AccountAdmin 创建的)因此在该过程中我可以 运行 system$generate_scim_access_token('');和 return 结果:
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 是副作用函数)并且 运行将其与所有者权限结合在一起会给出异常(对于 运行ning 副作用在具有所有者权限的过程中起作用)。如果我们 运行 它与调用者 运行 没关系,但我们想 运行 它与所有者。
有许多这样的命令 运行 仅在调用者的上下文中而不是所有者的上下文中(例如 Show 命令,如 Show Tables)。
以下知识库文章中记录了调用者权限与所有者权限所支持内容的详细说明:
https://docs.snowflake.com/en/sql-reference/stored-procedures-rights.html
从最终用户的角度来看,这里的要求是合理的。因此,您可以通过在 Snowflake 支持下提出案例或在 Snowflake 的想法门户网站上提出想法来向 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('');和 return 结果:
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 是副作用函数)并且 运行将其与所有者权限结合在一起会给出异常(对于 运行ning 副作用在具有所有者权限的过程中起作用)。如果我们 运行 它与调用者 运行 没关系,但我们想 运行 它与所有者。
有许多这样的命令 运行 仅在调用者的上下文中而不是所有者的上下文中(例如 Show 命令,如 Show Tables)。
以下知识库文章中记录了调用者权限与所有者权限所支持内容的详细说明:
https://docs.snowflake.com/en/sql-reference/stored-procedures-rights.html
从最终用户的角度来看,这里的要求是合理的。因此,您可以通过在 Snowflake 支持下提出案例或在 Snowflake 的想法门户网站上提出想法来向 Snowflake 提出改进请求:https://community.snowflake.com/s/ideas