我有一个像这样的对象名称。
grant execute on dbms_rls to public;
create table empholiday
(
EmpNo number(5),
Name nvarchar2(60),
Holiday date
);
INSERT INTO empholiday VALUES (1,'HANN','02-JAN-2019');
INSERT INTO empholiday VALUES (2,'ANNU','12-MAY-2019');
INSERT INTO empholiday VALUES (3,'THEOTA','26-AUG-2019');
我创建了 3 个用户:HANN、ANNU、THEOTA 我想为这些用户制定 VPD 策略:
- ANNU 只能选择和修改她的数据。
- THEOTA 不能选择和修改任何数据。
- HANN 可以选择所有数据,但只能修改(插入、删除、更新)“假日”列中日期大于当前日期的日期(不能修改部分中的日期)
这是我到目前为止所做的:
create user HANN identified by 123456;
create user ANNU identified by 123456;
create user THEOTA identified by 123456;
create role emp;
grant connect to emp;
grant create session to emp;
grant emp to HANN;
grant emp to ANNU;
grant emp to THEOTA;
grant select,update,delete,insert on empholiday to ANNU;
drop function Annu_Theota;
--create function
create or replace function Annu_Theota (p_schema varchar2, p_obj varchar2)
return varchar2 as
l_user varchar2(20);
begin
l_user := SYS_CONTEXT('userenv', 'SESSION_USER');
if (l_user = 'ANNU') then
return 'Name=' || '''' || l_user || '''';
elsif (l_user = 'THEOTA') then
return '1=0';
end if;
end Annu_Theota;
begin
dbms_rls.add_policy
(object_schema=>'trongdat'
,object_name=>'empholiday'
,policy_name=>'HolidayControl'
,policy_function=>'Annu_Theota_Hann'
,statement_Types=>'SELECT,UPDATE,INSERT,DELETE'
);
end;
我不知道如何为此用户 HANN 应用合适的策略。任何人都可以提出一些想法。