Oracle APEX 用户权利和特权

Oracle APEX User Rights and Previleges

我没有太多经验,我想知道是否有一种简单的方法来创建用户权限和权限,以便每个用户只能访问数据库 tables 中的特定记录,基于在他所属的层面上。

更具体地说,假设我们有一组公司,其中该组有一些公司,这些公司有一些分支机构,分支机构有一些用户。

我希望属于“公司集团”级别的用户能够访问和查看数据库中与该集团相关的所有条目以及它下面的内容(其公司和这些公司的分支机构)。

属于“公司”级别的用户应该只能访问和查看这家公司的文件以及这家公司可能在数据库中的分支机构。

属于“Branch”级别的用户应该只能访问和查看数据库中的这个 barnch 记录。

最后,属于“最终用户”级别的用户可以访问并只能查看用户在数据库中创建的记录。

当然,“管理员”级别将有权访问数据库中的所有记录。

我想创建一个带有字段“User_Level”的用户 table 并在每个 table 中输入 USER_ID 在此基础上我可以找到用户的级别但是如何我可以根据集团公司或公司或其所属的分支机构限制访问吗?

您可以创建过程或函数,并在您应用的共享组件中 -> 授权方案使用 pl/sql function/procedure returning 布尔值和 return true对于用户你想看到的东西和假的隐藏。 在 Apex 组件中,select 这种授权方案就像在项目、页面等中一样

在 APEX 中,您可以创建授权方案来确定用户可以访问应用程序中的哪些组件 - 但这只是该问题的部分答案。您的问题是关于根据特定条件过滤显示给用户的数据。 有几个可能的解决方案。由于这是一个非常广泛的问题,我将给您 pointers/concepts 以开始您的研究。由您决定什么 solution/combination 最适合您的实施table。

概念:Multi-Tenancy 如果数据被多个租户使用,则向每个具有租户特定数据的 table 添加一个 tenant_id。在您的情况下,租户应该是一个分支机构。一个简单的设计可以是一个组table(持有分公司-公司-公司组),一个group_memberstable(定义分公司-公司-公司组之间或任何组和之间的关系)一个用户)和一个用户 table.

概念:VPD 这是oracle数据库中的一个特性,允许安全规则的透明实现。在应用程序中,您将定义一个简单的 select like

  SELECT * FROM emp

但是 VPD 实现会自动向查询添加 where 子句以仅显示 VPD 策略中定义的记录。这使得开发应用程序变得容易得多,因为错误的空间更小。请注意,您的许可证无法包含此数据库选项。还有一种称为“Poor Man's VPD”的东西不使用 VPD 选项。 Google 关于如何在您的 apex 应用程序中实现它。

全部手动完成: 这是最不受欢迎的选项,但可以完成。对于每个完成 select 的组件,手动添加一个 where 子句以限制返回的行。然而,这是非常密集的维护工作,并且存在大量错误空间 - 数据模型仍然必须支持数据的条带化。

Jeffrey Kemp 的博客 post 也可能会给您一些建议:https://jeffkemponoracle.com/2017/11/convert-an-apex-application-to-multi-tenant/ - 阅读底部的“进一步阅读”部分。