Определение привилегий на хранимую процедуру
Функция
Определение оператора задания привилегии на выполнение хранимой процедуры.
Спецификация
<определение привилегий на хранимую процедуру>
::=GRANT привилегия ON [имя схемы.]имя хранимой процедуры
TO {PUBLIC | {имя пользователя | имя роли}[, …]}
TO {PUBLIC | {имя пользователя | имя роли}[, …]}
<привилегия>
::={EXECUTE | EXECUTE AS OWNER}
Общие правила
-
Опция
PUBLICпредоставляет доступ к процедуре всем пользователям БД. -
Опции
<имя пользователя>и<имя роли>предоставляют доступ к процедуре соответственно указанному пользователю БД и пользователям, которым назначена роль. -
Давать права на выполнение хранимой процедуры может только ее владелец.
-
Привилегия
EXECUTEдает право на выполнение процедуры от своего имени (т.е. выполнять от своего имени все содержащиеся в ней SQL-запросы, как это делает предложениеEXECUTE <имя хранимой процедуры>). -
Привилегия
EXECUTE AS OWNERдает право выполнять процедуру от имени ее владельца (т.е. все содержащиеся в процедуре SQL-запросы будут выполняться от имени владельца процедуры).
Пример
username SYSTEM/MANAGER8
create or replace table AAA(i int);
create or replace procedure AAA_proc(in i int) result int
code
print("Name of user: " + username()); //
execute direct "insert into AAA(i) values (" + itoa(i) + ");"; //
return i; //
end;
drop user "TEST" cascade;
create user "TEST" identified by '12345678';
grant execute as owner on SYSTEM.AAA_proc to "TEST";
grant select on AAA to "TEST";
username TEST/12345678
execute SYSTEM.AAA_proc(100) as owner;
select * from SYSTEM.AAA;