DeepEdit!

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

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

Привилегии и хранимые подпрограммы

Хранимые подпрограммы и модули являются объектами словаря данных, и поэтому они принадлежат конкретным пользователям базы данных или схемам. Другие пользователи могут обращаться к этим объектам, если им предоставлены необходимые привилегии. Привилегии и роли начинают действовать при создании хранимого объекта, они отвечают за доступ, обеспечиваемый в подпрограмме.
Привилегия EXECUTE
Чтобы разрешить доступ к таблице, применяются объектные привилегии SELECT, INSERT, UPDATE и DELETE. Эти привилегии предоставляются пользователю или роли базы данных при помощи оператора GRANT. Для хранимых подпрограмм и модулей необходима привилегия EXECUTE. Обратимся вновь к процедуре RecordFullClasses:
Внимание
В execute, sql сначала создаются пользователи UserA и UserB, а затем объекты, используемые в примерах этого раздела. Чтобы пример выполнялся в вашей системе, возможно, придется изменить пароль учетной записи DBA. Результат выполнения execute, sql находится в файле execute, out,
Предположим, что владельцем объектов, от которых зависит Record­FullClasses (функция AlmostFull и таблицы classes и temp_table), является пользователь UserA. Он же является владельцем RecordFullClasses. Предо­ставим привилегию EXECUTE на RecordFullClasses другому пользователю базы данных, скажем, UserB:
В данном случае владельцем всех объектов базы данных является поль­зователь UserA (см. рис. 10.14). Пунктирная линия на рисунке означает предоставление полномочия (оператор GRANT) пользователем UserA поль­зователю UserB, а непрерывная линия — зависимости, существующие между объектами. Результаты исполнения программного блока вводятся в таблицу UserA.temp_table.
Теперь предположим, что UserB владеет таблицей, которая также назы­вается temp_table (рис. 10.15). Если UserB вызывает UserA. RecordFullClasses (исполняя представленный выше анонимный блок), то какая из таблиц бу­дет модифицирована? Таблица пользователя UserA. Сформулируем правило:
По умолчанию подпрограмма выполняется на основании набора при­вилегий своего владельца.
Хотя UserB вызывает RecordFullClasses, этой процедурой владеет UserA. Поэтому идентификатор temp_table будет поставлен в соответствие таб­лице, принадлежащей пользователю UserA, а не UserB.
Огас1е8г содержит новое средство, называемое "правами вызывающе­го". Оно разрешает указать набор привилегий для исполнения процеду­ры: набор владельца или набор вызывающего (см. ниже раздел "Права вызывающего и определяющего").
 









jAntivirus