在客服、审计等业务场景中,工作人员往往需要核对信息,但真的有必要看到完整的信用卡号或身份证号码吗?展示完整的敏感数据,不仅徒增内部数据泄露风险,也违反了PCI-DSS等安全合规要求。传统方案需要修改应用代码或创建复杂视图,而Oracle Database 12c引入的Data Redaction(数据动态脱敏)功能,让数据库管理员无需改动一行应用代码,即可为敏感数据实时加上“保护罩”。
什么是 Data Redaction?
Data Redaction是一种动态数据脱敏技术。其核心在于“动态”:数据在存储层(磁盘)上依然是原始状态(明文或加密后的密文),但在查询结果即将返回给客户端的那一刻,数据库会根据预先定义的策略,实时地对数据进行变换。
这意味着实现了以下关键特性:
- 对应用透明:应用程序无需任何代码改造,完全无感知。
- 数据无损:底层真实数据保持完好,授权用户(如管理员、审计员)仍可访问完整信息。
- 策略灵活:可以根据执行查询的用户身份、客户端工具等条件,动态决定脱敏程度,实现不同用户看到不同内容的效果。

Data Redaction 的核心价值
1. 快速满足合规要求
面对严格的数据安全审计,数据库管理员可以在几分钟内为全库的敏感字段部署脱敏策略,无需等待冗长的应用开发和测试周期。
2. 最小化对应用的影响
策略在数据库层面集中配置和管理,无需开发团队介入。该特性支持通过SQL*Plus、JDBC、OCI等各种客户端工具执行的查询。
3. 提供多种脱敏方式
支持完全脱敏(替换为空值或零)、部分脱敏(用指定字符如*替换部分内容)、随机脱敏(返回符合格式的随机值)以及基于正则表达式的脱敏,满足多样化需求。
实战操作:配置部分脱敏策略
我们将使用Oracle提供的DBMS_REDACT包,演示如何隐藏customers表中信用卡号的中间8位数字。
第一步:准备测试数据
创建测试表并插入示例数据。
CREATE TABLE customers (
id NUMBER,
name VARCHAR2(50),
credit_card VARCHAR2(19)
);
INSERT INTO customers VALUES (1, 'Alice', '1234-5678-9012-3456');
COMMIT;
第二步:创建脱敏策略
通过DBMS_REDACT.ADD_POLICY过程添加一个策略。该策略规定:当查询用户不是SYSTEM时,对credit_card列进行部分脱敏,保留前4位和后4位,中间用*填充。
BEGIN
DBMS_REDACT.ADD_POLICY(
object_schema => 'HR',
object_name => 'CUSTOMERS',
column_name => 'CREDIT_CARD',
policy_name => 'redact_cc_policy',
function_type => DBMS_REDACT.PARTIAL, -- 指定为部分脱敏
function_parameters => '9,1,4,*,4,*,4', -- 格式说明:从第1位开始,保留4位,用*替换后续4位,依此类推
expression => 'SYS_CONTEXT(''USERENV'',''SESSION_USER'') != ''SYSTEM''' -- 脱敏条件:非SYSTEM用户
);
END;
/
第三步:验证脱敏效果
使用普通用户账号查询表,查看脱敏结果。
SELECT * FROM hr.customers;
-- 查询结果示例:
-- ID NAME CREDIT_CARD
-- 1 Alice 1234-****-****-3456
如果使用SYSTEM用户执行相同查询,则仍会看到完整的信用卡号1234-5678-9012-3456,这正是“动态”与“条件化”策略的体现。

进阶脱敏模式
除了PARTIAL(部分脱敏),Data Redaction还支持其他模式:
- FULL(完全脱敏):数值型数据被替换为
0,字符型数据被替换为空格。
- RANDOM(随机脱敏):每次查询都返回一个随机生成的值,此模式常用于测试环境,用于模拟真实数据分布而不暴露真实信息。
- REGEXP(基于正则表达式脱敏):对于邮箱、特定编码等复杂格式的数据,可以使用正则表达式进行更精细化的匹配和替换。
重要注意事项
- 非存储层加密:Data Redaction仅是展示层的脱敏。如果攻击者能够直接访问数据文件或通过RMAN备份恢复数据,仍可能获取明文。如需物理存储加密,应使用TDE(透明数据加密)等技术。
- WHERE子句潜在风险:脱敏不影响查询条件处理。执行如
SELECT * FROM customers WHERE credit_card = '1234-5678-9012-3456'的查询时,即使结果中该列被脱敏,数据库仍能正确匹配到该行记录。这可能在理论上被用于进行推断攻击。
- 与TDE结合构建纵深防御:最佳安全实践是结合使用TDE(保障静态数据安全)和Data Redaction(保障动态数据展示安全),构建从存储到访问的立体化数据安全防护体系。
总结
Oracle Data Redaction如同一个实时生效的“数据安全滤镜”,在确保原始数据完整性的同时,根据策略动态掩盖敏感信息。对于受合规驱动、且希望以最小成本改造现有系统的企业而言,这是一项极具实用价值的内置安全特性。