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

参照 http://blog.csdn.net/diyyong/article/details/19552637

用法如下:

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;

  

Oracle策略相关的更多相关文章

  1. Oracle 性能相关常用脚本(SQL)

    在缺乏的可视化工具来监控数据库性能的情形下,常用的脚本就派上用场了,下面提供几个关于Oracle性能相关的脚本供大家参考.以下脚本均在Oracle 10g测试通过,Oracle 11g可能要做相应调整 ...

  2. Oracle权限相关查询

    Oracle权限相关查询着实视图有点多,记录下常用的语句,方便查询:1.查看所有用户:  select * from dba_users;  select * from all_users;  sel ...

  3. Oracle 数据库维护相关

    版本升级 在维护数据库升级的过程中,会产生n个脚本.谈谈我所处的项目背景,项目数据库最早版本假定为1,最后在多次维护后,版本号,可能变更为16.那么针对项目上不同的数据库版本,如何来进行升级呢? 我使 ...

  4. Oracle数据库相关问题之ORA-12541:TNS:无监听程序

    在用PL/SQL Developer等客户端工具连接oracle服务器时出现ORA-12541:TNS:无监听程序的错误,如下图: 发现原来是oracle的监听没有启动,重启监听后就连接成功了,下面跟 ...

  5. oracle数据库相关知识点

    已知表如下:

  6. oracle表相关

    堆表 数据以堆的形式管理,增加数据时会使用段中找到的第一个能放下数据的自由空间,我们见到的绝大部分的表都是堆表.堆表是数据库的默认表类型. 最简单的情况是 create table test (c1 ...

  7. Oracle ASM 相关的 视图(V$) 和 数据字典(X$)

    本文转自: http://blog.csdn.net/tianlesoftware/article/details/6733039 ASM由于其高度的封装性,使得我们很难知道窥探其内部的原理.可以通过 ...

  8. Oracle审计相关对象的迁移

    目录 创建审计用的表空间 在线迁移 查询结果 在日常的数据库维护中,经常出现因为数据库登录审计的功能启动,导致system表空间被用满.从而出现异常,一般建议把aud$相关对象迁移到其他表空间,从而避 ...

  9. oracle 9i相关问题

    Oracle 9i在连接数据库的时候需要加上双引号,如sqlplus “sys/oracle@orcl as sysdba” Oracle 9i不支持bigfile大的表空间创建,oracle9i或以 ...

随机推荐

  1. Java线程池解析

    Java的一大优势是能完成多线程任务,对线程的封装和调度非常好,那么它又是如何实现的呢? jdk的包下和线程相关类的类图. 从上面可以看出Java的线程池主的实现类主要有两个类ThreadPoolEx ...

  2. Spring Boot -- Start Up

    做Java Web的同学,都知道项目启动需要放到servlet容器里面运行,无论是使用哪一款IDE,都是非常麻烦的一件事情.在很早之前,一个servlet容器下可以放下很多的项目,并一起运行,而到现在 ...

  3. 用Go语言做产品半年的一些感觉

    用Go语言做产品刚好半年,有一些感觉跟大家说道说道. 在使用Go之前,我常常想象,无法使用先进的Debug工具会对工作进度造成多么巨大的影响.甚至在Visual Studio的娇惯下认为,不能调试基本 ...

  4. 我的架构设计~用层关系图说说mvc,mvvm,soa,ddd

    下面是按着我所接触的架构模式,开始一个一个的说一下 第一 标准架构 三层结构

  5. iOS-证书

    1.iOS-证书相关 2.iOS-证书申请 3.iOS-APNS证书申请与使用 4.iOS-App发布证书的申请与使用

  6. tornado session

    [转]tornado入门 - session cookie 和session 的区别: 1.cookie数据存放在客户的浏览器上,session数据放在服务器上. 2.cookie不是很安全,别人可以 ...

  7. 阿里云本地FTP怎么连接?通用win7,win8,win8.1,win10

  8. Android中的复制粘贴

    Android中的复制粘贴 The Clipboard Framework 当使用clipboard framework时,把数据放在一个剪切对象(clip object)里,然后这个对象会放在系统的 ...

  9. 国内maven镜像,快的飞起

    在oschina关来关去的烦恼下,终于受不了去寻找其他公共库了. 阿里云maven镜像 <mirrors> <mirror> <id>alimaven</id ...

  10. 代码的坏味道(10)——发散式变化(Divergent Change)

    坏味道--发散式变化(Divergent Change) 发散式变化(Divergent Change) 类似于 霰弹式修改(Shotgun Surgery) ,但实际上完全不同.发散式变化(Dive ...