【发布时间】:2018-02-06 14:21:19
【问题描述】:
如何在 oracle apex 5.1 上创建一个像 facebook 一样工作的授权方案
示例 user1 和 user2 同桌
user1 使用他/她的帐户登录并插入数据 并且可以查看数据 user2 登录到他/她的帐户无法查看 user1 插入的数据
反之亦然
【问题讨论】:
如何在 oracle apex 5.1 上创建一个像 facebook 一样工作的授权方案
示例 user1 和 user2 同桌
user1 使用他/她的帐户登录并插入数据 并且可以查看数据 user2 登录到他/她的帐户无法查看 user1 插入的数据
反之亦然
【问题讨论】:
APEX 授权方案控制对 APEX 组件(例如页面、区域、项目等)的访问,但不是对数据行的访问。
针对此要求的适当 Oracle 解决方案是 Virtual Private Database (VPD),它会在所有查询中强制执行您的规则,以限制用户可以看到哪些行。但是要使用它需要 Oracle 企业版。
适用于任何版本的 Oracle 的简单方法是:
每个表都需要一个带有创建它的用户 ID 标记的列,例如CREATED_BY。您可以使用数据库触发器来确保始终使用 APEX 用户名填充它。 (注意 VPD 方法也需要此列。)
在每个报告查询中添加过滤器,例如:
和 e.created_by = :APP_USER
当然,您总是有忘记在某处添加过滤器的风险。避免这种情况的更好解决方案是创建应用过滤器的视图,例如
create view apex_employees as
select * from employees
where created_by = (select v('APP_USER') from dual);
然后使用架构和授权确保 APEX 只能看到视图,而不是表。现在无需为每个报表查询添加过滤器。这种解决方案有时被称为“穷人的 VPD”。
【讨论】: