将列设为视图

时间:2015-04-08 20:05:03

标签: oracle

简而言之,我不会解释为什么我想这样做,就是我想做的事。

我有两个用户(我用作模式)A和B.两个都有一个表USERS。两个USERS表都有一个列ID。每个A.USERS.ID都可以在B.USERS.ID中找到,每个B.USERS.ID都可以在A.USERS.ID中找到(我对其进行了约束)。 A.USERS和B.USERS之间唯一的其他共享列是NAME和AGE。

编辑:为了使这更清楚...我遇到的问题是模式A和B之间的NAME和AGE的值不同。例如,A中的用户ID 723有A.NAME ='John Vincent ”。在B中,B.NAME ='JJ Vincent'。我希望NAME和AGE始终保持一致。所以,我认为我需要将它存储在一个地方并让它在两个地方可见。

当我让某人查询B.USERS时,我希望B.USERS.NAME和B.USERS.AGE实际上是A.USERS.NAME和A.USERS.AGE。如果我有权同时查询A和B,那么这是我可以使用的查询:

select B.ID, A.NAME, A.AGE from B.USERS join A.USERS on B.USERS.ID=A.USERS.ID

但是,我不想向所有人授予对A的访问权限。我只想授予对B的访问权限(类似地,有些人只能访问A,而那些人是我唯一想要更新NAME和AGE值的人。)

我知道我不能只将2列视为一个视图。还有其他一些技巧可以使NAME和AGE成为A的视图,但是具有B的权限吗?我希望我已经解释得足够有意义了。只是试图避免写论文。

1 个答案:

答案 0 :(得分:0)

您可以将B和A上的更新,插入,删除授予应该能够到达的任何人或者。如果您想要基于查询的有限视图,则可以仅授予对视图的访问权限,而无需授予对表的访问权。

如果您需要对B的列特定更新访问权限,那么您可以在oracle中执行“列级安全性”。

类似于“将table_name上的update update(column_name)授予user_name”,并且您已授予访问权限,只能更新该表中的“column_name”。