Oracle策略相关

网友投稿 827 2023-04-28

***策略相关

***策略相关

***策略可以限制查询、修改、删除、新增等操作,刚接触,对查询做一个测试:

用法如下:

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;

创建函数:

create or replace function f_policy (   p_owner  in varchar2,--两个参数必须要有,名字可以不一样   p_object in varchar2 ) return varchar2 as   v_sql varchar2(2000); begin   v_sql := lower(sys_context('USERENV', 'CURRENT_SQL', 4000));   if instr(v_sql, ' where ') = 0 then     return 'deptno=10';     --raise_application_error(-20001, '未包含where条件');   end if;   return ''; end;

添加策略(需在sys下添加):

begin dbms_rls.add_policy(object_schema => 'scott', object_name => 'emp', policy_name => 'sal', function_schema => 'scott', policy_function => 'f_policy', sec_relevant_cols => 'sal'); end;

该策略和函数搭配,限制了如果关于emp表的dml语句中未包含where下自动添加where dept=10的条件,示例如下:

select * from emp;

删除策略:

begin    sys.dbms_rls.drop_policy(object_schema => 'scott',                             object_name => 'emp',                             policy_name => 'sal');  end;

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:ORACLE数据库异步IO介绍
下一篇:十款最佳MySQL GUI工具简介
相关文章