Как запустить функции побочного эффекта снежинки, такие как SYSTEM $ GENERATE_SCIM_ACCESS_TOKEN, в процедуре с правами владельца? - PullRequest
0 голосов
/ 09 июля 2020

В основном я хочу сделать интеграцию SCIM в Snowflake. Для этого я должен использовать эту команду для получения токена, который будет передан в Azure AD:

call system$generate_scim_access_token('<value>');

Эта команда может запускаться только с AccountAdmin. И запустив его с помощью AccountAdmin, я могу получить токен, но в будущем у меня не будет прав AccountAdmin, поэтому для того, что я сделал, я создал процедуру с AccountAdmin и выполнил ее как владелец. Таким образом, когда любая другая роль, имеющая разрешение на использование этой процедуры, вызывает эту процедуру, она будет выполняться с правами AccountAdmin (поскольку она была создана с помощью AccountAdmin), и, следовательно, в этой процедуре я могу запустить систему $ 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 - это функция побочного эффекта), и запуск ее с правами владельца вызывает исключение (должно быть ограничение с помощью снежинки для запуска функций побочного эффекта внутри процедуры с правами владельца). Если мы запустим его с вызывающим абонентом, он будет работать нормально, но мы хотим запустить его с владельцем.

1 Ответ

1 голос
/ 14 июля 2020

Есть много таких команд, которые выполняются только в контексте вызывающего, а не в контексте владельца (например, команды Показать, такие как Показать таблицы).

Подробное описание того, что поддерживается в вызывающих Право против прав владельцев задокументировано в следующей статье kb:

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

С точки зрения конечных пользователей это требование является разумным. Таким образом, вы можете отправить запрос на улучшение Snowflake, обратившись в службу поддержки Snowflake или предложив идею на портале Snowflake Idea: https://community.snowflake.com/s/ideas

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...