Oracle dbms.set_role не работает в приложении APEX

в наших приложениях j2ee мы используем роль безопасного приложения. По сути, источник данных использует схему пользователя приложения для подключения к базе данных. у пользователя приложения есть только права на создание сеанса. триггер входа в базу данных скопирует набор атрибутов в локальный безопасный контекст. (IP-адрес, пользователь сеанса, идентификатор клиента, имя приложения). Приложения явно вызывают хранимую процедуру sec_mgr.set_role перед выполнением любых DML.

sec_mgr.set_role проверит атрибут локального контекста, авторизует IP-адрес, имя приложения и установит для этого сеанса важную роль на основе пользователя сеанса.

мы хотим применить ту же структуру к приложению APEX. Во-первых, мы меняем схему сопряжения на схему приложения, которая имеет только привилегию создания сеанса. затем мы помещаем код plsql, в котором sec_mgr.set_role вызывается в построителе приложений -> общие компоненты ---> редактировать атрибут безопасности ---> виртуальная частная база данных (VPD).

однако мы получили ошибку ORA-06565: невозможно выполнить SET ROLE из хранимой процедуры

sec_mgr.set_role определяется как право инициатора (AUTHID CURRENT_USER)

мне что-то не хватает в APEX, чтобы заставить его работать?

Спасибо


person sse    schedule 24.05.2011    source источник


Ответы (2)


Проблема здесь в том, что модель безопасности APEX полностью отличается от модели J2EE.

Пользователи APEX не являются пользователями базы данных и не имеют доступа ни к чему в базе данных, кроме случаев, предусмотренных безопасностью APEX. Пользователи базы данных не являются пользователями APEX и не имеют прав для входа в приложение APEX.

Пользователь базы данных, который запускает приложение APEX (APEX_PUBLIC_USER или ANONYMOUS), должен иметь не связанный с ролями доступ к схеме / таблицам, используемым самим приложением. Поскольку каждая страница / процесс отправки (по сути) не имеет состояния, каждый отдельный процесс просмотра или отправки страницы пытается запустить «SET ROLE», что не требуется.

Вы можете прочитать это обсуждение или это обсуждение процесса безопасности APEX, чтобы дать лучшее представление о том, что происходит.

person Thomas Jones-Low    schedule 28.05.2011

просто столкнулся с этим при исследовании другой проблемы с ролью Apex - ответ Томаса Джонса-Лоу требует небольшого пояснения ... где, поскольку apex работает как APEX_PUBLIC_USER или ANONYMOUS, это не то, что контролирует привилегии базы данных во время выполнения или во время разработки. Каждая рабочая область Apex сопоставлена ​​со схемой, и привилегии, связанные с этими схемами, используются во время выполнения и разработки - в противном случае все рабочие области Apex имели бы неограниченный доступ к базе данных, поскольку все они подключаются как APEX_PUBLIC_USER или ANONYMOUS.

person user2171575    schedule 14.03.2013