Какие привилегии могут отсутствовать в случае предоставленного разрешения на вызов пакета, который вызывает пакет?

К сожалению, я не могу предоставить какой-либо код, но я постараюсь объяснить как можно лучше и при необходимости предоставлю дополнительную информацию.

В этом сценарии задействованы 3 разные схемы: X_SCHM, APPS и HR.

В APPS есть пакет с именем X_PKG для запуска некоторых функций для ресурса, а X_PKG также вызывает процедуру в пакете HR_EMPLOYEE_API, принадлежащем схеме HR. APPS предоставляет X_SCHM права на выполнение X_PKG, а X_SCHM может успешно вызывать процедуры внутри X_PKG.

Однако я хочу отойти от APPS и перейти к X_SCHM, поэтому тело пакета X_PKG копируется в новый X2_PKG в X_SCHM. X2_PKG по-прежнему должен вызывать процедуру в HR_EMPLOYEE_API, поэтому X_SCHM получает разрешение на выполнение этого пакета.

Теперь, когда X_SCHM пытается вызвать X2_PKG, который по всем учетным записям идентичен X_PKG, принадлежащему APPS, он успешно входит в HR_EMPLOYEE_API, принадлежащий HR, а затем начинает сталкиваться с ошибками «таблица или представление не существует» внутри него, проблема, которую APPS или X_SCHM под управлением X_PKG, принадлежащего APPS, не работает.

Я не уверен, что это вопрос дополнительных грантов, которые необходимо сделать. Я думаю, поскольку X_SCHM имеет привилегию выполнения в HR_EMPLOYEE_API, процедуры, которые он вызывает из HR_EMPLOYEE_API, смогут получить доступ к таблицам, принадлежащим HR, если только мне не хватает информации о пакетах, которым требуются собственные предоставленные привилегии отдельно от схем, которым они принадлежат.

Пожалуйста, дайте мне знать, где я могу уточнить или предоставить дополнительную информацию, чтобы решить эту проблему.


person stumpbeard    schedule 26.07.2017    source источник
comment
это связано с пакетом Oracle E Business, пожалуйста, отметьте и его.   -  person Sudipta Mondal    schedule 26.07.2017
comment
Сделали так сейчас.   -  person stumpbeard    schedule 26.07.2017
comment
Вы создали эти процедуры, используя предложение AUTHID CURRENT_USER или AUTHID DEFINER (по умолчанию)?   -  person krokodilko    schedule 26.07.2017
comment
@stumpbeard - это не очень хорошая стратегия. Вам нужно будет дать много execute grants. даже если вы хотите использовать что-то вроде fnd_profile.value, вам нужно будет предоставить более 5 разрешений на выполнение пакетам, используемым внутри `fnd_profile'. Совсем не хорошая идея   -  person Sudipta Mondal    schedule 26.07.2017
comment
@stumpbeard вы даете право на выполнение 1 API, который может выполнять другие процедуры, контекст не меняется на APPS, он остается только как пользовательская схема, поэтому я предлагаю не следовать маршруту :)   -  person Sudipta Mondal    schedule 26.07.2017
comment
Если вы планируете перейти на EBS 12.2 (не знаете, на чем вы работаете), вам действительно не следует создавать пакет X2_PKG в X_SCHM. Во многом это противоречит стандарту кодирования 12.2 EBS. См. Создание пользовательского приложения в Oracle E-Business Suite Release 12.2 (идентификатор документа 1577707.1).   -  person Patrick Bacon    schedule 27.07.2017


Ответы (1)


Пакет HR_EMPLOYEE_API определен как AUTHID CURRENT_USER. Это означает, что весь код внутри пакета выполняется от лица вызывающего его пользователя. Итак, в основном у вас есть 3 варианта:

1) Вы оставляете пакет в Пользователе APPS, как предложил @Sudipta Mondal. Звучит как самый безопасный выбор.

2) Если X2_PKG определяется как AUTHID DEFINER, можно попробовать скопировать все прямые права с APPS на X_SCHM и надеяться на лучшее. Но на самом деле это не так уж хорошо, потому что я совершенно уверен, что APPS имеет много прав. К счастью, вам не нужно беспокоиться о разрешениях, полученных через роли, поскольку они не применяются в пакетах. попробуй что-нибудь подобное

select 'GRANT '||PRIVILEGE||' ON '||OWNER||'.'||TABLE_NAME||' TO X_SCHM;' FROM DBA_TAB_PRIVS WHERE GRANTEE = 'APPS';

3) Попробуйте выяснить, какие права добавить, методом проб и ошибок или извлекая их из DBA_DEPENDENCIES, если на них есть ссылки:

select REFERENCED_OWNER, REFERENCED_TYPE, REFERENCED_NAME from dba_dependencies where NAME = 'HR_EMPLOYEE_API';

Я лично согласен с Sudipta Mondal, вам, вероятно, следует пересмотреть его перенос, если это не обязательно.

person LauDec    schedule 27.07.2017
comment
Это фантастическая подача информации. Я согласен с тем, что пакет не следует перемещать за пределы APPS, но это не мое решение. Однако это был действительно отличный способ выяснить, какие гранты мне нужны. Спасибо. - person stumpbeard; 27.07.2017