【问题标题】:Oracle dbms.set_role does not work in APEX applicationOracle dbms.set_role 在 APEX 应用程序中不起作用
【发布时间】:2011-09-01 05:25:18
【问题描述】:

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

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

我们希望将相同的框架应用于 APEX 应用程序。首先,我们将配对模式更改为只有创建会话权限的应用模式。然后我们将调用 sec_mgr.set_role 的 plsql 代码放在 application builder --> shared components ---> edit security attribute ---> Virtual Private Database (VPD) 中。

然而,我们得到了错误 ORA-06565: cannot execute SET ROLE from within stored procedure

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

我是否遗漏了 APEX 中的某些内容以使其正常工作?

谢谢

【问题讨论】:

    标签: oracle-apex security-roles


    【解决方案1】:

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

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

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

    您可以阅读 APEX 安全流程的 this discussionthis discussion,以更好地了解正在发生的事情。

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 2022-01-03
        • 1970-01-01
        • 2014-10-06
        • 1970-01-01
        • 2019-02-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多