我正试图使用SQL语句在Oracle中创建一个VPD。这个问题的目的是让员工只能查看同一部门员工的记录,同时将同事的工资屏蔽为NULL。
所用表格的代码如下
create table Employee
(
ID number primary key,
DEPT varchar2(25),
SALARY number(8,2),
NAME varchar2(25)
);
我不确定做这件事的最佳方式是什么……是创建一个包并使用应用程序上下文吗。我相信让表格只显示那些相同的";DEPT";我理解但不确定如何屏蔽那些具有相同DEPT但不同ID的人的数据。
本机RLS会让您接近,但不会完全达到。使用";sec_ relevant_ cols";将为您提供之间的选项
- 只看到与谓词匹配的行,但所有值都存在
- 查看所有行,但屏蔽与谓词不匹配的值
而(如果我读得正确的话(你只想看到谓词匹配行,并屏蔽一些值。
你可以通过两步方法来实现这一点
-
您的上下文包含两个键(例如(DEPT和Your_ID
-
RLS策略是";其中dept=sys_context(ctx,‘dept’(";
-
您有一个应用该策略的视图EMP,即
select id, dept, name, case when id = sys_context(ctx,'YOUR_ID') then sal else null end sal from EMP_TABLE