首页 > 解决方案 > Oracle中相同的表名,相同的架构,不同的用户

问题描述

我有以下要求:

是否有可能在 Oracle 中实现这一点?

标签: oracle

解决方案


你写的一切都是可能的,除了

  • 所有 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 虚拟私有数据库将动态 WHERE 子句添加到针对应用了 Oracle 虚拟私有数据库安全策略的表、视图或同义词发出的 SQL 语句。

更多信息在这里:https ://docs.oracle.com/cd/B28359_01/network.111/b28531/vpd.htm#DBSEG98215


推荐阅读