-- 一、建立測試表 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;