您的位置:首页 > 数据库 > Oracle

oracle 策略POLICY学习

2015-10-20 21:58 405 查看
-- 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;

####################模拟测试#########################
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: