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;




####################模拟测试#########################
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值