oracle 策略POLICY学习

-- 一、建立测试表
create table TEST_POLICY
(
  USERNAME VARCHAR2(10),
  PASSWORD NUMBER(10)
);
insert into TEST_POLICY values('a',30);
insert into TEST_POLICY values('b',20);
insert into TEST_POLICY values('c',40);
commit;
--二、建立策略约束函数,表只可输入密码为40的用户,其余用户将被删除
CREATE OR REPLACE Function Fn_GetPolicy(P_Schema in varchar2,
                                        P_Object in varchar2)
  return varchar2 is
  L_PREDICATE VARCHAR2(1000) := '';
Begin
  L_PREDICATE := 'password=40';
  Return L_PREDICATE;
end Fn_GetPolicy;
--三、建立策略
declare
Begin
  Dbms_Rls.Add_Policy(Object_Schema   => 'SCOTT', --数据表(或视图)所在的Schema名称 
                      Object_Name     => 'TEST_Policy', --数据表(或视图)的名称 
                      Policy_Name     => 'T_TestPolicy', --POLICY的名称,主要用于未来对Policy的管理 
                      Function_Schema => 'SCOTT', --返回Where子句的函数所在Schema名称 
                      Policy_Function => 'Fn_GetPolicy', --返回Where子句的函数名称 
                      Statement_Types => 'Select,Insert,Update,Delete', --要使用该Policy的DML类型,如'Select,Insert,Update,Delete' 
                      Update_Check    => True, --仅适用于Statement_Type为'Insert,Update',值为'True'或'False' 
                      Enable          => True --是否启用,值为'True'或'False' 
                      );
end;
--注:若是Update_Check设为'True',则用户插入的值不符合Policy_Function返回条件时,该DML执行返回错误信息。 
--如今就能够工做了: select * from TEST_POLICY ;  看看结果怎样, 是否是少了password<>40的数据了.
--四、查看当前用户的策略
SELECT * FROM USER_POLICIES;
--五、删除策略
DECLARE
BEGIN
  Dbms_Rls.drop_policy('SCOTT', --要删除的Policy所在的Schema
                       'TEST_Policy', --要删除Policy的数据表(或视图)名称
                       'T_TESTPOLICY' --要删除的Policy名称
                       );
end;
相关文章
相关标签/搜索