DeepEdit!

Программирование баз данных на Oracle, техническая документация, литература, статьи и публикации

  • Увеличить размер шрифта
  • Размер шрифта по умолчанию
  • Уменьшить размер шрифта

Права вызывающего и определяющего

Проанализируем ситуацию, представленную на рис. 10.15. Здесь оба пользователя UserA и UserB владеют копиями таблицы temp_table, a RecordFullC-lasses принадлежит UserA и вводит данные в UserA. temp_tabie. RecordFullClasses называется процедурой с правами определяющего (definer's rights), поскольку неквалифицированные внешние ссылки внутри нее разрешаются на основании набора привилегий ее владельца, т.е. определяющего.
Возможен и другой способ разрешения внешних ссылок. В подпрограмме с правами вызывающего (invokeг''s rights) внешние ссылки разрешаются на основании набора привилегий не владельца, а вызываю­щего. Подобная подпрограмма создается с помощью предложения AUTHID. Это разрешено только для автономных подпрограмм, для опи­саний модулей и для описаний объектных типов (см. главу 12).
Все отдельные подпрограммы модуля должны иметь права вызывающе­го или определяющего, их комбинация недопустима. Синтаксис AUTHID:
Если в предложении AUTHID указано (текущий пользователь), то объекту предоставляются права вызывающего, а если DEFINER — то права определяющего. По умолчанию (если конструкция AUTHID отсутствует) устанавливаются права определяющего.
Например, следующий вариант процедуры RecordFullClasses обладает правами вызывающего:
Внимание
В invokers.sql сначала создаются пользователи UserA и UserB, а затем объекты, используемые в примерах этого раздела. Чтобы пример выполнялся в вашей системе, возможно, придется изменить пароль учетной записи DBA. Результат выполнения invokers. sql находится в файле invokers.out.,
Если RecordFullClasses выполняется пользователем UserB, данные вво­дятся в таблицу UserB. temp_table, а если пользователем UserA - то в табли­цу UserA. temp_table. Это демонстрируется следующим сеансом SQL*Plus и рис. 10.18.
 









jAntivirus