共计 1962 个字符,预计需要花费 5 分钟才能阅读完成。
什么是 Data Redaction
Data Redaction 是 Oracle Database 12c 的高级安全选项之中的一个新功能,Oracle 中国在介绍这个功能的时候,翻译为“数据编纂”,在 EM12c R3 的中文界面中,这个功能被翻译成“数据编写”,我认为后一个翻译更贴切。
在 12c 发布前,某次以“数据库安全”为题目的技术交流中,有一个客户问我们,Oracle 数据库里面能不能实现这么一个功能:符合条件的用户可以看到表里面的所有数据,而另外一些人(业务权限低的用户)虽然能查询表,但是某些敏感数据全部用星号替换。我当时的想法是在 11g 中没有能够完全满足这个客户需求的功能。
现在 12c 的 Data Redaction 就可以完全满足上面提到的客户的需求了。所以如果用一句话概括:Data Redaction 就是根据策略(条件)原地(Oracle 用了 on-the-fly 这个词)改写数据,以保护敏感数据。
Data Redaction 和 Database Vault 都能保护敏感数据,他们的不同就是,在配置了 Database Vault 的环境中,如果访问不符合策略,会报错,提示没有足够的权限。而在 Data Redaction 环境中,符合策略的访问,会看到被改写的(星号遮蔽,随机转换)数据。另外,Database Vault 还能限制特权用户,而 Data Redaction 对 DBA 用户无效。
Data Redaction 配置
Data Redaction 的配置是通过系统系统的 PL/SQL 包来实现的,简单的说,就是使用这些 PL/SQL 包定义“数据改写”策略,策略中要定义的内容有:
l 敏感数据所对应的 SCHEMA,表,列
l 数据编写生效的条件
l 数据编写所使用的方式以及对应的参数
这些工作都可以使用 PL/SQL 包来完成,也可以使用 EM12c 通过 web 页面来配置。下面我们就以 EM12c 举例说明。
如果使用图形界面配置“数据改写”,需要使用 EM12c R3(Oracle Enterprise Manager Cloud Control 12c Release 3),EM Express 中没有对应的功能(11g 的 DBControl 在 12c 名字变为 EM Express,界面用 ADF 从新实现的,但是功能似乎更少了)。
1. 登录 EM12c,进入数据库实例的主页。我这里使用的是一个 PDB(Pluggable Database),因为这个里面有示例数据,在 CDB(Container Database)中配置的方法是一样的,需要进入 CDB 的主页进行操作。
2. 点击“管理”-〉“安全性”-〉“Oracle Data Redaction”,如果没有配置数据库的身份证明,系统会提示输入身份证明,我这里用的是 SYS 用户。
3. 进入“数据改写”页面,创建策略
选择方案(SCHEMA),希望改写的表,策略名:
修改策略表达式,也就是策略的生效条件,我在这里选择的是数据库会话用户为 SCOTT。
在进行下一步之前,我们先要确认敏感数据的格式。在本例中,我们希望将 HR 用户下的 EMPLOYEES 表中的 PHONE_NUMBER 列进行改写。这个列的数据形式如下图所示:
假设我们希望将电话号码全部用 * 号代替,只保留前 3 位。
点击页面下方的“对象列”区域的“添加”,在弹出窗口中添加敏感数据列及编写方式,在界面上也有简单的示例,如图所示:
因为要保留前 3 个电话号码,所以从第 4 个字符开始改写,全部需改写的字符是 10 个,中间的“.”不算,所以“直到”第 10 个字符。
4. 测试策略:
使用 SQL*PLUS 登录 HR 用户,可以查看所有数据。
使用 SCOTT 用户登录,查看到的是这个样子:
如果我们把策略生效的条件改为“会话用户为 HR”,那么即使 HR 是这个表的 OWNER,也只能看到改写后的数据:
其他类型的策略表达式
现实环境中,许多应用都是使用一个数据库用户登录的,所以数据改写的生效条件也可以是根据 Client 端信息或应用程序信息进行判断。当然,在应用程序中,必须要设置相关的 CONTEXT。注意,如果应用的用户拥有 DBA 权限,数据改写就无效了。
我们使用 SQL*PLUS 模拟应用使用同一个数据库用户,利用 CONTEXT 实现数据改写。(实际上是不同应用用户,使用不同的 CONTEXT。)
我们使用 HR 登录,将 MODULE 手工设置成“HRMS”。
当我们 MODULE 设置为其他值时(模拟切换不同类型的应用用户),则数据改写策略不生效。
APEX 环境下的例子
在安装了 APEX 环境的数据库中,配合 APEX 使用数据改写也非常简单,利用 APEX 的 PL/SQL 表达式写法,引用应用用户名,以下是例子:
其他用户登录应用效果:
Test_user1 登录应用的效果:
本文永久更新链接地址 :http://www.linuxidc.com/Linux/2016-12/138551.htm