Snowflake creating/replacing 另一个角色创建的存储过程
Snowflake creating/replacing a stored procedure created by another role
- 我在 Snowflake 中有一个由
SYSADMIM
角色创建的存储过程 (return_greater(int, int)
)。
- 我还有一个自定义角色 (
readwrite
),它被授予内置 SYSADMIN
角色。
下面是存储过程。
create or replace procedure return_greater(number_1 integer, number_2 integer)
returns integer not null
language sql
as
$$
begin
if (number_1 > number_2) then
return number_1;
else
return number_2;
end if;
end;
$$
;
我已使用以下命令将存储过程的所有权限授予角色 readwrite
。
grant all privileges on procedure DatabaseName.SchemaName.return_greater(int, int) to role READWRITE;
以下是对存储过程的授权。
现在,当我尝试使用 readwrite
角色 create/replace 存储过程时,出现以下错误 -
我的问题是如何让 readwrite
角色,create/replace 存储过程,而不实际将存储过程的所有权授予该角色。
简短的回答:不转让所有权是不可能的。
长答案:执行 CREATE 语句的授权仅来自主要角色。创建对象时,其所有权设置为当前活动的主要角色。但是,对于任何其他 SQL 操作,授予任何活动的主要或次要角色的任何权限都可用于授权该操作。
有关详细信息,请查看 here。
- 我在 Snowflake 中有一个由
SYSADMIM
角色创建的存储过程 (return_greater(int, int)
)。 - 我还有一个自定义角色 (
readwrite
),它被授予内置SYSADMIN
角色。
下面是存储过程。
create or replace procedure return_greater(number_1 integer, number_2 integer)
returns integer not null
language sql
as
$$
begin
if (number_1 > number_2) then
return number_1;
else
return number_2;
end if;
end;
$$
;
我已使用以下命令将存储过程的所有权限授予角色 readwrite
。
grant all privileges on procedure DatabaseName.SchemaName.return_greater(int, int) to role READWRITE;
以下是对存储过程的授权。
现在,当我尝试使用 readwrite
角色 create/replace 存储过程时,出现以下错误 -
我的问题是如何让 readwrite
角色,create/replace 存储过程,而不实际将存储过程的所有权授予该角色。
简短的回答:不转让所有权是不可能的。
长答案:执行 CREATE 语句的授权仅来自主要角色。创建对象时,其所有权设置为当前活动的主要角色。但是,对于任何其他 SQL 操作,授予任何活动的主要或次要角色的任何权限都可用于授权该操作。
有关详细信息,请查看 here。