Динамическое переключение ролей в снежинке - PullRequest
1 голос
/ 20 апреля 2020

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

SQL compilation error: Database 'SecondDB' does not exist or not authorized.

Затем я попытался использовать запрос перед вставкой во вторую базу данных внутри процедуры изменить роль следующим образом:

var SwitchToLoader = "use role SecondDbRole";
try {
snowflake.execute 
(
     {sqlText: SwitchToLoader}
);
}
catch (err)  {
     return "Failed: " + err;  
}

это все еще дает мне ошибку:

SQL access control error: Insufficient privileges to operate on role 'SecondDbRole'

Так что любые предложения, как вставить данные в мою вторую базу данных, роль которой отличается от одной хранимой процедуры ?

1 Ответ

2 голосов
/ 20 апреля 2020

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

Вы могли бы Для этого просто необходимо включить пункт «Выполнить как владелец».

Более подробную информацию о правах звонящего и владельца можно найти в нашей документации

https://docs.snowflake.net/manuals/sql-reference/stored-procedures-usage.html#choosing-между-владельцем-правами-и-вызывающим-правами

...