Как предоставить доступ к PROCEDURE_DEFINITION в Snowflake с роли АДМИНИСТРАТОРА другой роли?

#sql #permissions #snowflake-cloud-data-platform #snowflake-schema

#sql #разрешения #snowflake-cloud-data-platform #snowflake-схема

Вопрос:

Я создал хранимую процедуру ‘XYZ’ в схеме «ADMIN», используя роль «ADMIN_ROLE», и предоставил разрешение «ИСПОЛЬЗОВАНИЕ» от учетной записи «ADMIN» другой роли, которая является «ABC_ROLE».

Используемый оператор:

 GRANT USAGE 
ON ALL PROCEDURES IN SCHEMA "DATABASE_TEST"."ADMIN" 
TO ROLE "ABC_ROLE";
 

Однако я не вижу PROCEDURE_DEFINITION , использую ли я ABC_ROLE .

 SELECT PROCEDURE_DEFINITION  
FROM INFORMATION_SCHEMA.procedures 
WHERE procedure_name = 'XYZ' 
 

возвращает NULL или DESCRIBE PROCEDURE XYZ() возвращает тело как пустое.

Какие дополнительные разрешения я должен предоставить, чтобы предоставить доступ к определению тела / процедуры для «ABC_ROLE» из «ADMIN_ROLE»?

Ответ №1:

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

Тест:

 create or replace procedure test_view(x string)
returns string 
language javascript
execute as caller
as $
return "hi"
$;

describe procedure test_view(string);

grant usage on procedure test_view(string) to role public;

use role public;

call test_view('');

describe procedure test_view(string);
 

Но если процедура выполняется как owner , то владелец может видеть ее тело.

Обратите внимание, что привилегиями процедур являются только «использование» и «владение»: