2015-03-10 5 views
0

У меня есть процедура (procedureA), которая создается в схеме (schemaA). У пользователя SchemaA нет привилегий только для роли CONNECT. ProcedureA отвечает за выбор, изменение, обновление ... privilages для конкретной таблицы в других схемах для конкретного пользователя. То, что я читал в oracle doc (How Procedure Privileges Affect Invoker's Rights), заключается в том, что процедура использует права владельца, и теперь я не понимаю, как можно вызвать эту процедуру с помощью пользователя sys, поскольку пользователь schemaA не имеет никаких прав. ПроцедураА была создана без AUTHID CURRENT_USER. После выполнения процедуры право собственности предоставляется правильно.Oracle procedure - invoker right vs права владельца

Благодаря

+0

Если у схемы не было никаких привилегий, она не смогла бы создать процедуру; или были ли привилегии отменены позже? Вы смотрите только на роли или системные привилегии (dba_sys_privs) и права объекта (dba_tab_privs)? Привилегии от ролей не будут иметь никакого эффекта в процедуре прав владельцев, так или иначе, только прямые гранты. –

+0

Привет, Алекс. Привилегии были отменены после того, как были созданы схема и процедура. dba_tab_privs также пуст для schemaA. Спасибо – mrrobot

ответ

1

В «Защита Oracle Database 12c» Пол Райт на странице 91 под SYSDBA Фишинг говорится, что привилегия SYSDBA будет проходить, если процедура ущемления прав DEFINER в вызове. (Найдено в Google учебниках)

Если это так, то при использовании учетной записи как SYSDBA (как в случае с SYS автоматически), процедуры в других схемах выполняются с правами invokers, даже если они не определены.

+0

Я пробовал вышеуказанную настройку в базе данных Oracle 11.2.0.3, и она делает именно это: сеанс SYSDBA перегружает права определений в процедуре. –