【大数据开发运维解决方案】Oracle Data Redaction数据加密测试

本文涉及的产品
密钥管理服务KMS,1000个密钥,100个凭据,1个月
云原生大数据计算服务 MaxCompute,5000CU*H 100GB 3个月
云原生大数据计算服务MaxCompute,500CU*H 100GB 3个月
简介: 最近有个做Java开发的网友问我,怎么在Oracle进行数据加密呢?我给他推荐了Data Redaction。Oracle Database 12c中加入了Data Redaction这个新的安全特性。当然在11g的Database Advanced Security Administrator’s Guide官方文档中就介绍了。

前言

最近有个做Java开发的网友问我,怎么在Oracle进行数据加密呢?
我给他推荐了Data Redaction。
Oracle Database 12c中加入了Data Redaction这个新的安全特性。当然在11g的Database Advanced Security Administrator's Guide官方文档中就介绍了。如果你想要隐藏一个字段所有值或部分值的话,而且还要为用户提供他们需要的信息的时候,或则换句话说,你想仅某些用户看到的一些数据是隐藏的,但是另一些用户看到的是正常的数据,就可以用Data Redaction~


一、介绍

官方链接:
对于列中的数据有以下几种redaction方式:

1、Full redaction

对列中的数据全部redact,number类型的列将全部返回为0,character类型的列将全部返回为空格,日期类型返回为2001-01-01。

2、Partial redaction

对列中的一部分数据进行redact,比如,可以对社会保险号的前几位设置返回为*,剩下的几位保持不变。只有列中的数据为固定宽度时才能使用这种方式,如果列中存储的是email地址,每个email地址的宽度不尽相同,此时要使用Regular expressions。

3、Regular expressions

可以使用正则表达式查找要编校的数据模式。例如,您可以使用正则表达式编校电子邮件地址,电子邮件地址可以具有不同的字符长度。它仅设计用于字符数据。

4、Random redaction

提供给查询用户的编校数据每次显示时都显示为随机生成的值,这取决于列的数据类型。

5、No redaction

此选项使您能够测试编校策略的内部操作,而不影响对定义了策略的表的查询结果。在将编校策略定义应用到生产环境之前,可以使用此选项测试它们。

`重点关注:
不能对sys和system用户进行数据的redact。因为他们都有EXP_FULL_DATABASE这个角色, 而这个角色又包含了EXEMPT REDACTION POLICY系统权限。同理,也不能直接赋予用户dba权限,dba自动包含EXP_FULL_DATABASE角色。`


二、部分功能测试

创建测试用户

create user zhaoyd identified by zhaoyd;
create user zhaojh identified by zhaojh;
grant connect,resource to zhaoyd;
grant select on sys.redaction_policies to zhaoyd;
grant select on sys.redaction_columns to zhaoyd;
grant execute on dbms_redact to zhaoyd;

给zhaoyd用户建一张表名为emp:
编辑策略:

1、将phone字段中间4位数值用*号替代

begin
  dbms_redact.add_policy(object_schema       => 'ZHAOYD',
                         object_name         => 'EMP',
                         policy_name         => 'test_zhaoyd_emp',
                         column_name         => 'PHONE',
                         function_type       => Dbms_Redact.PARTIAL,
                         expression          => '1=1',
                         function_parameters => 'vvvvvvvvvvv,vvvvvvvvvvv,*,4,7');
end;

2、将地址LOC字段给完全隐藏

begin
  dbms_redact.alter_policy(object_schema       => 'ZHAOYD',
                         object_name         => 'EMP',
                         policy_name         => 'test_zhaoyd_emp',
                         action => dbms_redact.ADD_COLUMN,                         
                         column_name         => 'LOC',
                         function_type       => Dbms_Redact.RANDOM);
end;

3、分别查询看效果

zhaoyd,zhaojh,sys用户分别查询这个表:
可以看到sys用户查询是不会受策略限制的。

创建角色,用角色来控制,只让被赋予这个角色的用户看到的数据是加密的:

create role redac_role;
grant redac_role to zhaojh;

接下来修改之前的策略:

begin 
    dbms_redact.alter_policy(object_schema       => 'ZHAOYD',
                         object_name         => 'EMP',
                         policy_name         => 'test_zhaoyd_emp',
                         action => dbms_redact.MODIFY_EXPRESSION,                       
                         column_name         => 'LOC',
                         expression => 'SYS_CONTEXT(''SYS_SESSION_ROLES'',''REDAC_ROLE'') = ''TRUE''');
end;

这时候再分别用zhaoyd,zhaojh,sys用户分别查询zhaoyd.emp:
给zhaoyd用户赋予角色redac_role:
zhaoyd用户看到的也是加密后的了。

总结

经过实际测试的出来的一些结果

  1. 对加密的列不能同时使用distinct和order by,如果使用,必须加一层select,无论对于使用的用户是否是加密可见;
  2. 加密的结果优先级高于函数,比如distinct;
  3. 对于group by不影响结果的准确性,与未加密结果一致;
  4. 加密后的表无法进行CTAS(create table as select)操作;
相关文章
|
4月前
|
运维 Ubuntu 测试技术
自动化运维的利剑:Ansible在配置管理中的应用软件测试的艺术:探索性测试的深度与广度
【8月更文挑战第27天】 在数字化浪潮中,高效的运维工作是支撑企业IT系统稳定运行的关键。Ansible,作为一款简易而强大的自动化运维工具,正逐渐成为IT专业人士的新宠。本文将通过浅显易懂的语言和生动的案例,带你了解Ansible的核心概念、安装步骤、基础命令以及它在配置管理中的实际应用。我们的目标是让初学者能够轻松上手Ansible,同时为有经验的运维工程师提供一些实用的技巧和思路。
|
4月前
|
SQL 安全 测试技术
网络安全的屏障与钥匙:漏洞防护与加密技术解析软件测试的艺术:探索性测试的力量
【8月更文挑战第27天】在数字时代的海洋中,网络安全是保护我们数据资产的灯塔和堤坝。本文将深入浅出地探讨网络安全领域的关键要素——安全漏洞、加密技术以及不可或缺的安全意识。通过实际案例分析,我们将了解如何识别和修补潜在的安全漏洞,掌握现代加密技术的工作原理,并培养起一道坚固的安全防线。文章旨在为读者提供实用的知识和技能,以便在日益复杂的网络环境中保持警惕,确保个人及组织信息的安全。
|
2月前
|
运维
【运维基础知识】用dos批处理批量替换文件中的某个字符串(本地单元测试通过,部分功能有待优化,欢迎指正)
该脚本用于将C盘test目录下所有以t开头的txt文件中的字符串“123”批量替换为“abc”。通过创建批处理文件并运行,可实现自动化文本替换,适合初学者学习批处理脚本的基础操作与逻辑控制。
181 56
|
28天前
|
安全 应用服务中间件 网络安全
如何测试Nginx反向代理实现SSL加密访问的配置是否正确?
如何测试Nginx反向代理实现SSL加密访问的配置是否正确?
52 3
|
4月前
|
运维 Oracle 前端开发
Oracle 11g RAC集群日常运维命令总结
Oracle 11g RAC集群日常运维命令总结
108 2
|
4月前
|
SQL 运维 Oracle
入门级Oracle 11g日常运维命令总结
入门级Oracle 11g日常运维命令总结
166 1
|
4月前
|
运维 Kubernetes 监控
|
5月前
|
运维 测试技术 调度
自动化测试框架的设计与实现自动化运维的利器:Ansible Role 实践指南
【7月更文挑战第31天】随着软件开发周期的缩短和迭代速度的加快,手动软件测试已难以满足效率与质量的双重需求。本文将深入探讨如何设计并实现一个高效的自动化测试框架,以提升测试工作的效率和准确性。我们将通过具体的代码示例,展示框架的核心组件和实现逻辑,帮助读者理解自动化测试框架的构建过程及其在实际项目中的应用价值。
52 5
|
5月前
|
Java 编译器 运维
开发与运维测试问题之在JVM中方法区也被称之为什么如何解决
开发与运维测试问题之在JVM中方法区也被称之为什么如何解决
26 1
|
5月前
|
Java 开发者 运维
开发与运维测试问题之OpenJDK官方还未正式发布Compact Object Headers如何解决
开发与运维测试问题之OpenJDK官方还未正式发布Compact Object Headers如何解决
42 1

推荐镜像

更多
下一篇
DataWorks