在Oracle中隐藏和显示同一表/视图上的列



在Oracle中是否可以创建一个表(或视图(,其中两个不同的用户访问同一个表或同一个视图,并且他们看到不同的列集?

例如,两个用户对名为employees:的表/视图执行相同的查询

select * from employees;

一个用户看到列namesalary的数据(总共列=2(。

另一个用户只看到name列的数据(总列数=1(。

我知道一个常见的解决方案是针对一个基表创建两个视图,并为每个视图分配不同的权限。然而,这对我们不起作用,因为我们的应用程序需要为两个用户使用相同的select(相同的FROM(。换句话说,我们需要将表/视图视为相同的对象,所有用户都具有相同的db.schema.name标识符。创建两个视图将创建两个名称不同的对象。

有些数据库允许向表(或视图(的列授予列权限,但Oracle显然不允许我对单个列授予GRANT SELECT权限。

另一个选项是VPD。然而,我看到的VPD示例并没有显示如何隐藏整个列。它们展示了如何根据列值隐藏行(例如。https://docs.oracle.com/cd/B28359_01/network.111/b28531/vpd.htm#DBSEG98231)或者它们展示了如何屏蔽列中的部分或全部值。我还没有看到一个VPD示例完全隐藏基于用户权限的列。

Oracle中是否有其他选项可以根据用户权限隐藏列?

提前感谢

你朝着正确的方向前进。为每个用户创建特定的视图

create view employees_a as select name, salary from employees;
create view employees_b as select name from employees;

然后,为了始终使用相同的名称,创建用户特定的SYNONYMS:

create synonym user_a.employees for main_schema.employees_a;
create synonym user_b.employees for main_schema.employees_b;

相关内容

  • 没有找到相关文章

最新更新