我的问题是如何用SQL在Oracle中创建一个VPD,它也会屏蔽数据



我正试图使用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";将为您提供之间的选项

  • 只看到与谓词匹配的行,但所有值都存在
  • 查看所有行,但屏蔽与谓词不匹配的值

而(如果我读得正确的话(你只想看到谓词匹配行,并屏蔽一些值。

你可以通过两步方法来实现这一点

  1. 您的上下文包含两个键(例如(DEPT和Your_ID

  2. RLS策略是";其中dept=sys_context(ctx,‘dept’(";

  3. 您有一个应用该策略的视图EMP,即

    select 
    id, 
    dept, 
    name,
    case when id = sys_context(ctx,'YOUR_ID') then sal else null end sal
    from EMP_TABLE
    

最新更新