Oracle中相同的表名,相同的模式,不同的用户

时间:2019-04-26 14:46:38

标签: oracle

我有以下要求:

  • TABLE1是表名
  • 每个用户都应有权访问其TABLE1版本
  • 不同TABLE1表中的数据由其用户管理。
  • 用户不应有权访问其他用户的TABLE1
  • 所有TABLE1表应位于同一架构中
  • 当用户在SQL客户端中运行select * from TABLE1时,他们应该看到其TABLE1版本。

是否可以在Oracle中实现这一目标?

1 个答案:

答案 0 :(得分:2)

您写的所有内容都是可能的,除了

  • 所有TABLE1表应位于同一架构中

因为在同一模式中不能有两个具有相同名称的表。


“模式” =用户及其对象(表,视图,过程等)。因此,每个用户可以拥有自己的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