0
  1. 我有两张桌子。a) 学生 b) 受限学生。
    1. 两个用户 a) 管理员 b) 用户
    2. 两个用户的同义词stu。在管理员中,它指的是学生,但对于用户,它指的是受限制的学生。

我想创建一个物化视图 MV 。物化视图的代码看起来像

CREATE MATERIALIZED VIEW SELECT TABLE_NAME,COLUMN_NAME FROM USER_TAB_COLUMNS;

这样,如果我连接到管理员,那么它应该指的是学生,而对于用户,它应该通过传递唯一的同义词名称 stu 来指代restricted_student。就像是

SELECT TABLE_NAME,COLUMN_NAME FROM USER_TAB_COLUMNS E='st';

当我连接到用户时,我想要的结果应该给restricted_student 表列。而每当我连接到管理员时,它应该给学生表列

我创建了上述所有对象。但是物化视图没有给出我想要的预期结果。

4

1 回答 1

0

您可以使用普通视图,您可以在其中合并这 2 个表并按登录用户进行过滤。还要检查 Oracle RLS(行级安全性),https://docs.oracle.com/cd/B28359_01/network.111/b28529 /intro.htm

无论应用程序和用户如何,您都可以控制 where 子句的位置。这样,您就可以更好地控制查询记录。

例如,

管理员用户
select * from stu;

普通用户
select * from stu;

根据您为 RLS 设置的谓词,会有完全不同的结果。

于 2016-02-26T18:18:39.237 回答