Oracle策略相关

发布时间:2025-05-19 02:36:22 作者:益华网络 来源:undefined 浏览量(0) 点赞(0)
摘要:Oracle策略可以限制查询、修改、删除、新增等操作,刚接触,对查询做一个测试: 用法如下: begin -- Call the procedure sys.dbms_rls.add_policy(object_schema => :数据表(或视图)所在的Schema名称/用户, object_name => :数据表(

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

  用法如下:

  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; 

二维码

扫一扫,关注我们

声明:本文由【益华网络】编辑上传发布,转载此文章须经作者同意,并请附上出处【益华网络】及本页链接。如内容、图片有任何版权问题,请联系我们进行处理。

感兴趣吗?

欢迎联系我们,我们愿意为您解答任何有关网站疑难问题!

您身边的【网站建设专家】

搜索千万次不如咨询1次

主营项目:网站建设,手机网站,响应式网站,SEO优化,小程序开发,公众号系统,软件开发等

立即咨询 15368564009
在线客服
嘿,我来帮您!