天天看點

oracle 政策POLICY學習

-- 1、建立測試表

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;

--2、建立政策限制函數,表隻可輸入密碼為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;

--3、建立政策

declare

begin  

  -- Call the procedure  

  sys.dbms_rls.add_policy(object_schema => :資料表(或視圖)所在的Schema名稱/使用者,  

                          object_name => :資料表(或視圖)的名稱,  

                          policy_name => :policy的名稱  

                          function_schema => :傳回Where子句的函數所在Schema名稱/使用者,  

                          policy_function => :傳回Where子句的函數名稱,  

                          statement_types => :要使用該Policy的DML類型,如'Select,Insert,Update,Delete',  

                          update_check => 僅适用于Statement_Type為'Insert,Update',值為'True'或'False',  

                          enable => 是否啟用,值為'True'或'False',  

                          static_policy => 預設值為FALSE。如果它被設定為TRUE則所有使用者啟用該政策,sys或特權使用者例外。  

                          policy_type => :預設值是null,意味着static_policy的值決定,在這裡指定任何政策将覆寫static_policy的值。  

                          long_predicate => long_predicate,  

                          sec_relevant_cols => :敏感的字段名稱,  

                          sec_relevant_cols_opt => :設定為dbms_rls.ALL_ROWS來顯示所有的行,敏感的列的值為null);  

end;

--注:如果Update_Check設為'True',則使用者插入的值不符合Policy_Function傳回條件時,該DML執行傳回錯誤資訊。 

--現在就可以工作了: 

select * from TEST_POLICY ;  看看結果怎樣, 是不是少了password<>40的資料了.

--4、檢視目前使用者的政策

SELECT * FROM USER_POLICIES;

--5、删除政策

DECLARE

BEGIN

  Dbms_Rls.drop_policy('SCOTT', --要删除的Policy所在的Schema

                       'TEST_Policy', --要删除Policy的資料表(或視圖)名稱

                       'T_TESTPOLICY' --要删除的Policy名稱

                       );

end;

####################模拟測試#########################