#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 , то владелец может видеть ее тело.
Обратите внимание, что привилегиями процедур являются только «использование» и «владение»: