我有以下要求:
select * from TABLE1
时,他们应该看到其TABLE1版本。是否可以在Oracle中实现这一目标?
答案 0 :(得分:2)
您写的所有内容都是可能的,除了
因为在同一模式中不能有两个具有相同名称的表。
“模式” =用户及其对象(表,视图,过程等)。因此,每个用户可以拥有自己的TABLE1
表。
似乎还有另一种模式,可以聚集每个人的TABLE1
表中的数据。为此,您可以将视图创建为
create or replace view v_table1 as
select 'USER1' owner, t.* from user1.table1 t union all
select 'USER2' , t.* from user2.table1 t union all
...
这意味着您编写的最终条件应该扩展一点,例如添加WHERE
子句。
select * from v_table1 where owner = 'USER2'
另一方面,如果每个用户都有自己的TABLE1
,为什么他们要查询“汇总的” (v_)TABLE1
?
最后,检查VPD(虚拟专用数据库)。简而言之:
Oracle虚拟专用数据库(VPD)使您可以创建安全策略来控制行和列级别的数据库访问。本质上,Oracle虚拟专用数据库向针对应用了Oracle虚拟专用数据库安全策略的表,视图或同义词发出的SQL语句添加了动态WHERE子句。
此处有更多信息:https://docs.oracle.com/cd/B28359_01/network.111/b28531/vpd.htm#DBSEG98215