Oracle dbms.set_role не работает в приложении APEX - PullRequest
2 голосов
/ 24 мая 2011

в наших приложениях 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, чтобы заставить его работать?

Спасибо

Ответы [ 2 ]

1 голос
/ 28 мая 2011

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

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

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

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

0 голосов
/ 14 марта 2013

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

...