zoukankan      html  css  js  c++  java
  • Oracle Data Redaction数据加密

    0?wx_fmt=gif&wxfrom=5&wx_lazy=1

    Oracle Database 12c中加入了Data Redaction作为一个新的安全特性。(实际在11g的官方Database Advanced Security Administrator's Guide文档中就已经有了具体介绍)。当你想要隐藏一个字段的所有值或部分值,但同时还要为用户提供他们需要的信息的时候,Data Redaction便有了用武之地。


    640?wx_fmt=png&wxfrom=5&wx_lazy=1Oracle Redaction概述640?wx_fmt=png&wxfrom=5&wx_lazy=1


    Oracle Data Redaction是Oracle安全加密类的高级功能,可用于对于敏感数据的加密处理,加密配置处理均在Oracle层面实现。这是一项和安全相关的技术类别,对于指定的用户可以限制某些表的某些列显示被加密改过的值。对于Redaction之前,可能需要自定义加密函数、创建特定的视图,或者在存储到数据库的时候就用加密算法进行加密。而Redaction可以直接对数据进行加密,不会影响到数据真实的存储,对应用透明,不需要改动。


    对于权限,Redaction不能对sys和system用户进行数据的加密。因为他们都有EXP_FULL_DATABASE这个角色, 而这个角色又包含了EXEMPT REDACTION POLICY系统权限。同时,也不能直接赋予用户dba权限,dba自动包含EXP_FULL_DATABASE角色。测试过程中发现,对于拥有dba权限的用户来说,表的数据可以加密操作,但没有实际加密效果。


    对于常用的加密类型说明:

    1.Full redaction:对某字段数据全部加密,number类型的列将全部返回为0,character类型的列将全部返回为空格,日期类型返回为yyyy-mm-dd;


    2.Partial redaction:对列中的一部分数据进行redact,比如,可以对身份证号或手机号的中间几位设置返回为*,剩下的几位保持不变,这种场景适用于固定长度;


    3.Regular expressions:对于非固定长度的character类型数据进行部分加密;


    4.Random redaction:随机加密,每次展现的加密结果是不一定一样;


    本次加密测试环境介绍信息如下:

    OS版本Oracle 版本是否RAC
    RHEL6.511.2.0.4.170418


    0?wx_fmt=pngOracle Redaction加密测试0?wx_fmt=png


    1、环境测试准备


    本次只模拟几种常用加密场景,创建用户、表,并赋予相应权限;若无特殊说明时,调用DBMS_REDACT所使用的均为zhangxg用户。


    0?wx_fmt=png


    2、对表的某些字段加密


    调用DBMS_REDACT包创建policy策略


    0?wx_fmt=png


    基于某列加密的基础上,再增加一个乱码显示的列,即多列加密显示


    0?wx_fmt=png


    3、Redaction的权限控制


    对于权限的控制,我们可以直接选择用户去过滤,但用户过多时可以使用role来进行权限的控制。


    nosee用户看到的结果也是加密的


    0?wx_fmt=png


    更改策略,除zhangxg本身用户外,其他用户访问均为加密


    0?wx_fmt=png


    创建角色和用户用于模拟


    0?wx_fmt=png


    下面,我们尝试去掉一个列的加密效果,即去掉LAST_NAME字段的全加密策略。


    0?wx_fmt=png


    再次更改策略,只让zhangxg和cansee用户查看,其他用户为加密结果;这里我们新建了REDAC_ROLE角色去控制,拥有该角色的用户可正常查看,没有该角色的用户查看结果为加密;


    0?wx_fmt=png


    4、Redaction的使用限制


    通过测试得出以下结论:


    1.对加密的列不能同时使用distinct和order by,如果使用,必须加一层select,无论对于使用的用户是否是加密可见;

    2.加密的结果优先级高于函数,比如distinct;


    3.对于group by不影响结果的准确性,与未加密结果一致;


    4.加密后的表无法进行CTAS(create table as select)操作;


    对于加密后剩余字符不一样时,distinct结果是不影响的。


    0?wx_fmt=png


    手动update,将SOCIAL_SECURITY后4位改成一致


    0?wx_fmt=png


    此时,对于加密不限制用户来说,distinct结果是2行。


    0?wx_fmt=png


    对于加密用户来说,distinct结果是1行,说明是先进行的加密,后进行distinct。


    0?wx_fmt=png


    当对加密列同时使用distinct和order by,报语法错误,该问题已确认为bug,而且没有补丁,Bug 19558306 ;


    0?wx_fmt=png


    做为workaround,可以将SQL改写为子查询。


    0?wx_fmt=png


    对于group by,加密后的效果是不影响分组判断。


    0?wx_fmt=png


    对于加密后的表无法进行CTAS操作,其实逻辑上是对的,既然加密了,如果能ctas成功那么加密就是去了意义


    0?wx_fmt=png


    同时,有了该权限后加密也是去了意义。


    0?wx_fmt=png


    0?wx_fmt=png附录0?wx_fmt=png


    1.对于已添加的策略,可通过下面视图进行查询


    0?wx_fmt=png


    2.删除加密策略


    0?wx_fmt=png


    特别鸣谢

    编写本文遇到了非常多的问题,同时参考了一些网络的博客。


    官方文档参考文档:Database Advanced Security Administrator's Guide


    作者介绍葛龙,云和恩墨技术顾问,拥有6年数据库运维经验。擅长于数据库迁移、解决数据库故障和性能问题。在数据库故障诊断、运维监控、性能优化方面积累了丰富的经验。

    个人博客地址:http://blog.itpub.net/26964624/ 


    关注本公众号,回复:prelection,你可以找到本文的相关视频文档。


    0?wx_fmt=jpeg


    相关阅读:

    Oracle 12c的一些新等待事件

    Oracle数据库12c release 2优化器详解

    Oracle Database 12c - Global Data Services

    Oracle 12c 多租户的SQL注入高危风险防范

    解决 Jdbc 连接 Oracle 12c 时快时慢的问题

    资源下载

    关注公众号:数据和云(OraNews)回复关键字获取

    ‘2017DTC’,2017DTC大会PPT

    ‘DBALIFE’,“DBA的一天”海报

    ‘DBA04’,DBA手记4经典篇章电子书

    ‘INTERNALS’,Oracle RAC PPT

    ‘122ARCH’,Oracle 12.2体系结构图

    ‘2017OOW’,Oracle OpenWorld资料

    ‘PRELECTION’,大讲堂讲师课程资料

    0?wx_fmt=png

  • 相关阅读:
    C++_重载、重写和重定义的区别
    C++静态库与动态库
    C++ 中重载运算符 “<” 及 friend属性
    C++中,关于#include<***.h>和#include"***.h"的区别
    static_cast, dynamic_cast, const_cast讨论
    浅析C++中static关键字
    C语言包含头文件时用引号和尖括号的区别
    vc实现透明位图,透明背景
    VS2008调试技巧——断点失效
    Spring解决循环依赖的理解
  • 原文地址:https://www.cnblogs.com/hzcya1995/p/13312459.html
Copyright © 2011-2022 走看看