2

在我们的 j2ee 应用程序中,我们使用安全应用程序角色。基本上,数据源使用应用程序用户模式连接到数据库。应用用户只有创建会话权限。数据库登录触发器会将一组属性复制到本地安全上下文。(IP 地址、会话用户、客户端 ID、应用程序名称)。应用程序在执行任何 DML 之前显式调用存储过程 sec_mgr.set_role。

sec_mgr.set_role 将检查本地上下文属性,授权 ip、应用程序名称,并根据会话用户为该会话设置赞赏角色。

我们希望将相同的框架应用于 APEX 应用程序。首先,我们将配对模式更改为只有创建会话权限的应用模式。然后我们将调用 sec_mgr.set_role 的 plsql 代码放入应用程序构建器 --> 共享组件 ---> 编辑安全属性 ---> 虚拟专用数据库 (VPD)。

但是,我们得到了错误 ORA-06565: cannot execute SET ROLE from inside stored procedure

sec_mgr.set_role 被定义为调用者的权限(AUTHID CURRENT_USER)

我是否在 APEX 中遗漏了一些东西以使其正常工作?

谢谢

4

2 回答 2

1

这里的问题是 APEX 安全模型与 J2EE 完全不同。

APEX 用户不是数据库用户,除了 APEX 安全性定义的内容外,无权访问数据库中的任何内容。数据库用户不是 APEX 用户,没有登录 APEX 应用程序的权限。

运行 APEX 应用程序的数据库用户(APEX_PUBLIC_USER 或 ANONYMOUS)需要对应用程序本身使用的架构/表具有非基于角色的访问权限。由于每个页面/提交过程(实际上)是无状态的,因此每个页面查看或提交过程都在尝试运行“SET ROLE”,这不是必需的。

您可以阅读此讨论或有关 APEX 安全流程的讨论,以更好地了解正在发生的事情。

于 2011-05-28T01:02:51.793 回答
0

刚刚在研究另一个 Apex 角色问题时遇到了这个问题——Thomas Jones-Low 的答案需要澄清一下……因为 apex 以 APEX_PUBLIC_USER 或 ANONYMOUS 的身份运行,这并不是在运行时或设计时控制数据库权限的原因。每个 Apex 工作区都映射到一个模式,并且与这些模式关联的权限在运行时和设计时使用 - 否则所有 Apex 工作区都将无限制地访问数据库,因为它们都以 APEX_PUBLIC_USER 或 ANONYMOUS 的身份连接。

于 2013-03-14T19:50:49.653 回答