当前位置: 首页 > 面试题库 >

如何在具有所有者权限的过程中运行雪花副作用功能,例如SYSTEM $ GENERATE_SCIM_ACCESS_TOKEN?

彭仲卿
2023-03-14
问题内容

基本上我想在雪花中进行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是副作用功能),并且以所有者权限运行它会产生例外(雪花在具有所有者权限的过程中运行副作用功能必须受到限制)。如果我们使用调用程序来运行它,它可以正常运行,但是我们想使用所有者来运行它。


问题答案:

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

以下kb文章详细记录了主叫权与所有者权支持的内容:

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

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


 类似资料:
  • 我有一堆功能文件(大约15个),其中每个功能文件都有一个线程,需要睡眠至少3分钟(对于一些复杂的后台应用程序,需要执行一些功能)。我需要一种并行执行它们的方法。 我有一个简单的CucumberRunnerTestCLass。 非常感谢您的帮助。谢谢

  • 问题内容: 我只想在特定用户的许可下查找文件。例如,如果我想查找我具有完全许可权的文件。 我可能会做类似的事情: 但是,如果我想忽略root和其他用户的许可,该怎么办。 问题答案: 从…开始: 这意味着:查找以开头,由拥有的文件,其中group和other的权限可以是任何东西(在权限字符串前面),而用户权限仅是: 要仅搜索文件(无目录),然后添加。

  • 已试过 获取 错误1064(42000):您的SQL语法中有错误;查看与您的MySQL服务器版本相对应的手册,了解第1行“标识由'root'WITH GRANT option”附近使用的正确语法。 注意:在以前的版本中尝试时同样有效。 也试过 获取 错误1410(42000):不允许创建具有授权的用户 MySQL(8.0.11.0)用户名/密码是root/root。

  • 授予Snowflake中所有存储过程的执行权限。 我想我需要添加执行权限,但我不知道在雪花中需要在哪里配置存储过程权限。 有人想给存储过程/表权限吗?

  • 我正在重新设计我们公司的API以使用来自SQL Server的Snowflake。我们的第一个直接障碍是现有的SQL Server存储过程返回表输出,而Snowflake不允许这种类型的输出。我不想完全重新设计一切,所以我在想: null 我知道对于编码来说,使用python这样的东西会容易得多,但是,我不想维护另一个python应用程序,只用于在Snowflake中检索数据。

  • 问题内容: 一个android库项目包含一些提供者,其提供者的权限如以下Contract类中的定义: 现在有许多使用此库项目的应用程序项目。我目前遇到的问题是,对于每个应用程序项目,我都需要在图书馆项目中为每个应用程序单独拥有一个分支,以便拥有唯一的内容权限。这造成了一些版本管理问题(例如,将功能/错误修复从一个分支传播到其他每个分支等)。相反,我想将定义内容权限的责任委托给app项目。有没有办法