Oracle对于敏感数据的处理,可以采用策略(dbms_rls.add_policy)
Oracle Policy的简单说明:
Policy应用于数据行访问权限控制时,其作用简而言之,就是在查询数据表时,自动在查询结果上加上一个Where子句。假如该查询已有where子句,则在该Where子句后面加上"And ..."。
由Oracle Policy自动加入的Where子句的内容,通常由一个函数来实现。而进行数据行访问权限控制算法实现的结果,也是通过该函数返回。
Oracle Policy语法说明:
创建策略:
begin
-- Call the procedure
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;
删除策略:
begin
dbms_rls.drop_policy(
object_schema=>'要删除的Policy所在的Schema',
object_name=>'要删除Policy的数据表(或视图)名称',
policy_name=>'要删除的Policy名称'
);
end;
改变policy状态:
begin
dbms_rls.enable_policy(
object_schema=>'要改变的Policy所在的Schema',
object_name=>'要改变Policy的数据表(或视图)名称',
policy_name=>'要删除的Policy名称',
enable=>'默认True,是否启用,True为启用策略,False为禁用策略'
);
end;
需要注意,在普通用户下是没有dbms_rls的权限,在使用之前需要对其授权
grant execute,debug on dbms_rls to scott;
具体实现:
在创建策略时需要创建策略使用到的函数:
create or replace function FN(p_schema in varchar2 default NULL,
p_object in varchar2 default NULL)
return varchar2 as
begin
return 'deptno=10';
end;
创建一个策略,只能看到部门为10的数据:
begin
dbms_rls.add_policy(
object_schema=>'scott',
object_name=>'emp',
policy_name=>'emp',
function_schema=>'scott',
policy_function=>'FN',
statement_types=>'SELECT'
);
end;
执行结果:
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
7782 CLARK MANAGER 7839 1981/6/9 2450.00 10
7934 MILLER CLERK 7782 1982/1/23 1300.00 10
只显示部门为10的数据。
如果该用户可以看到自己部门信息,也可以看到其他部门的部分信息,一些敏感字段则不能看到,比如工资。根据上个策略,只增加两个条件即可,如下:
begin
dbms_rls.add_policy(
object_schema=>'scott',
object_name=>'emp',
policy_name=>'emp',
function_schema=>'scott',
policy_function=>'FN',
statement_types=>'SELECT',
sec_relevant_cols=>'sal',
sec_relevant_cols_opt=>dbms_rls.ALL_ROWS
);
end;
执行结果:
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
7369 SMITH CLERK 7902 1980/12/17 20
7499 ALLEN SALESMAN 7698 1981/2/20 300.00 30
7521 WARD SALESMAN 7698 1981/2/22 500.00 30
7566 JONES MANAGER 7839 1981/4/2 20
7654 MARTIN SALESMAN 7698 1981/9/28 1400.00 30
7698 BLAKE MANAGER 7839 1981/5/1 30
7782 CLARK MANAGER 7839 1981/6/9 2450 10
7788 SCOTT ANALYST 7566 1987/4/19 20
7844 TURNER SALESMAN 7698 1981/9/8 0.00 30
7876 ADAMS CLERK 7788 1987/5/23 20
7900 JAMES CLERK 7698 1981/12/3 30
7902 FORD ANALYST 7566 1981/12/3 20
7934 MILLER CLERK 7782 1982/1/23 1300 10
所有记录全部显示,只是配置了敏感字段的sal,不是部门为10的数据则显示为空。
改变策略状态:
begin
dbms_rls.enable_policy(
object_schema=>'scott',
object_name=>'emp',
policy_name=>'emp',
enable=>true
);
end;
删除策略:
begin
dbms_rls.drop_policy(
object_schema=>'scott',
object_name=>'emp',
policy_name=>'emp'
);
end;
这样就可以实现数据的查询权限控制了。
Oracle对于敏感数据的处理,可以采用策略(dbms_rls.add_policy)的更多相关文章
- SYS_R12 MOAC多组织底层技术实现技术分析(Oracle VPD) (案例)
2014-05-30 Created By BaoXinjian
- Oracle策略相关
Oracle策略可以限制查询.修改.删除.新增等操作,刚接触,对查询做一个测试: 参照 http://blog.csdn.net/diyyong/article/details/19552637 用法 ...
- Oracle VPD策略示例
1.未创建前使用oe用户登录查询: SQL> select * from orders; ORDER_ID ORDER_DATE ORDER_MO CUSTOMER_ID ORDER_STATU ...
- Oracle设计规范!
Oracle设计规范! 一哥们整理的Oracle的设计规范,相当的不错,贴这以备后续之需! 目录 1.数据库模型设计方法规范 1.1.数据建模原则性规范 1.2.实体型之间关系认定规范 1.3.范式化 ...
- Hibernate的实体规则、主键生成策略、对象状态
一. hibernate的实体类有一定的规则,类似于mybatis的逆向工程导出的实体类.具体的规则以及原因如下: 1.持久化类需要提供无参的构造方法. 因为hibernate底层采用反射机制创建对象 ...
- Oracle 备份与恢复 15 个典型问题
1.问:Oracle11g数据库数据量有50T,每天增量50g左右,该如何制定备份方案,如何验证备份的有效性? 答:50T的数据也不大,运营商的地市级市数据基本都在100T以上了,只要备份环境允许的话 ...
- Oracle数据库备份、灾备的23个常见问题
为了最大限度保障数据的安全性,同时能在不可预计灾难的情况下保证数据的快速恢复,需要根据数据的类型和重要程度制定相应的备份和恢复方案.在这个过程中,DBA的职责就是要保证数据库(其它数据由其它岗位负责) ...
- 【转】京东金融App端链路服务端全链路压测策略
京东金融移动端全链路压测历时三个月,测试和服务端同学经过无数日日夜夜,通宵达旦,终于完成了移动端链路的测试任务.整个测试有部分涉及到公司敏感数据,本文只对策略部分进行论述. 1.系统架构与策略 在聊性 ...
- 【Oracle 集群】ORACLE DATABASE 11G RAC 知识图文详细教程之集群概念介绍(一)
集群概念介绍(一)) 白宁超 2015年7月16日 概述:写下本文档的初衷和动力,来源于上篇的<oracle基本操作手册>.oracle基本操作手册是作者研一假期对oracle基础知识学习 ...
随机推荐
- [转]你可能不知道的五个强大HTML5 API
一.全屏 // 找到适合浏览器的全屏方法 function launchFullScreen(element) { if(element.requestFullScreen) { element.re ...
- Android ANR的产生与分析
ANR即Application Not Responding应用无响应,一般在ANR的时候会弹出一个应用无响应对话框.也许有些开发者在使用某些手机开发中不在弹出应用无响应弹出框,特别是国产手机An ...
- iOS开发之duplicate symbols for architecture x86_64错误
[主要内容:] 1. 错误提示 2. 分析错误原因 3. 解决问题办法 一.错误提示 在我们写代码过程中可能会经常遇到这样一个错误: <span style="font-size: ...
- [Unity]Unity常见API
本文主要为了方便查阅 1. MonoBehaviour 生命周期 Awake 对象创建的时候调用,类似构造函数 Start 在Awake之后执行,区别在于,如果组件不可用(在Inspector没有勾选 ...
- [Linux]systemd和sysV
转自:https://www.cnblogs.com/EasonJim/p/7168216.html 在Debian8中systemd和sysVinit同时存在,NTP就是在/etc/init.d/n ...
- SSH使用小记
0.是什么 SSH(Secure Shell)是一种加密的网络传输协议,可在不安全的网络中为网络服务提供安全的传输环境.(更多详情可参阅维基百科 https://zh.wikipedia.org/wi ...
- Windows 安装服务 的两种方式
第一种 - 安装服务时自定义服务名称:(注意 binpath= 和路径之间的那个空格)sc create 服务名称 binpath= "D:\Service.exe" di ...
- 外部访问docker容器(docker run -p/-P 指令)
容器中可以运行一些网络应用,要让外部也可以访问这些应用,可以通过 -P(大写) 或 -p (小写) 参数来指定端口映射. (1)当使用 -P 标记时,Docker 会随机映射一个 49000~4990 ...
- 【Oracle】PL/SQL 显式游标、隐式游标、动态游标
在PL/SQL块中执行SELECT.INSERT.DELETE和UPDATE语句时,Oracle会在内存中为其分配上下文区(Context Area),即缓冲区.游标是指向该区的一个指针,或是命名一个 ...
- 用svg绘制圣诞帽
今天是圣诞节,无意中看到csdn博客上面给我的头像带了个圣诞帽,比较好奇,想看看csdn是怎么实现的,果然用的是svg实现,不过代码有点冗长. <html> <body> &l ...