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;
相關文章
相關標籤/搜索