Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 Права вызывающего при вложенных вызовах  [new]
A.K.
Member

Откуда: Пенза
Сообщений: 2571
Имеется процедура с правами вызывающего, пользователь petrov имеет роль dba, прямая привилегия alter user не выдана:
Connected to Oracle9i Release 9.2.0.7.0 
Connected as petrov
 
SQL> create or replace procedure proc1 (p_user varchar2) authid current_user is
  2  begin
  3    execute immediate 'ALTER USER "'||p_user||'" ACCOUNT LOCK';
  4  end proc1;
  5  /
 
Procedure created
SQL> begin
  2    proc1('IVANOV');
  3  end;
  4  /
 
PL/SQL procedure successfully completed

SQL> 

При вызове процедуры proc1 из другой процедуры, созданной с правами создателя, получаю ORA-01031:
SQL> create or replace procedure proc2 (p_user varchar2) authid definer is
  2  begin
  3    proc1 (p_user);
  4  end proc2;
  5  /
 
Procedure created
SQL> begin
  2    proc2('IVANOV');
  3  end;
  4  /

ORA-01031: insufficient privileges
ORA-06512: at "PETROV.PROC1", line 3
ORA-06512: at "PETROV.PROC2", line 3
ORA-06512: at line 3

Получается, что authid-кляуза внешней процедуры "переопределяет" поведение внутренней процедуры, так же выполняя ее с правами создателя вместо прав вызывающего? Объясните,пожалуйста, суть происходящего или ткните в документацию по данной теме.
15 июл 08, 20:24    [5938273]     Ответить | Цитировать Сообщить модератору
 Re: Права вызывающего при вложенных вызовах  [new]
Elic
Member

Откуда:
Сообщений: 29990
RTFM Who Is the Current User During Subprogram Execution? (FAQ)
15 июл 08, 20:36    [5938305]     Ответить | Цитировать Сообщить модератору
 Re: Права вызывающего при вложенных вызовах  [new]
RA\/EN
Member

Откуда:
Сообщений: 3659
A.K.
Получается, что authid-кляуза внешней процедуры "переопределяет" поведение внутренней процедуры, так же выполняя ее с правами создателя вместо прав вызывающего? Объясните,пожалуйста, суть происходящего или ткните в документацию по данной теме.

В переводе на русский это даже понятнее, чем на английском: процедура по-прежнему выполняется с правами вызывающего, просто вызывающий теперь - не подключившийся к базе пользователь, а владелец схемы, содержащей вызвающий пакет.
15 июл 08, 20:37    [5938307]     Ответить | Цитировать Сообщить модератору
 Re: Права вызывающего при вложенных вызовах  [new]
A.K.
Member

Откуда: Пенза
Сообщений: 2571
RA\/EN
В переводе на русский это даже понятнее, чем на английском: процедура по-прежнему выполняется с правами вызывающего, просто вызывающий теперь - не подключившийся к базе пользователь, а владелец схемы, содержащей вызвающий пакет.

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

Или это надо так трактовать: процедура вызывается с правами, с которыми исполняется программный код вызывающей процедуры? Просто в документации как-то про пользователей больше идет речь, а не про права.
15 июл 08, 20:46    [5938332]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить