23ai 新特性之数据脱敏增强

在金融、政务、医疗等行业,敏感数据(手机号、身份证、银行卡、客户地址)的合规治理已成为刚需。Oracle 从 12c 开始提供Data Redaction(数据脱敏 / 动态遮蔽),能在不改动原始数据的前提下,对查询结果做动态掩码,实现 “数据可用不可见”。
但在 23ai 之前,脱敏有明显短板:不支持复杂 SQL,分组、排序、聚合、关联查询一碰就报错或无法脱敏,严重限制在报表、BI、数据分析场景的落地。
Oracle 23ai(23.6)对数据脱敏做了架构级增强:脱敏从“作用于列” 升级为 “作用于结果集”,全面兼容复杂 SQL,真正做到业务透明、安全统一、性能可控.
23ai 把脱敏逻辑下沉到 SQL 执行结果集阶段:
原始数据不变,查询按真实值执行(索引、统计、优化器行为不变)结果返回前,对标记为敏感的列统一脱敏所有 SQL 结构,底层用真实值,外层返掩码值.

1)支持排序、分组、去重(GROUP BY / ORDER BY / DISTINCT)

-- 手机号脱敏:138****1234
EXEC DBMS_REDACT.ADD_POLICY(
  object_schema => 'HR',
  object_name   => 'EMP',
  column_name   => 'PHONE',
  policy_name   => 'REDACT_PHONE',
  function_type => DBMS_REDACT.FULL,
  expression     => '1=1'
);

-- 23ai 可正常执行:按脱敏列分组、排序
SELECT DEPT_ID, PHONE, COUNT(*)
FROM HR.EMP
GROUP BY DEPT_ID, PHONE
ORDER BY PHONE;
分组 / 排序:底层用真实 PHONE,返回给用户的是掩码值。

2)支持聚合函数(SUM/COUNT/MIN/MAX)

SELECT DEPT_ID, SUM(SALARY), AVG(SALARY)
FROM HR.EMP
GROUP BY DEPT_ID;

聚合计算用真实值,结果集中 SALARY 按策略脱敏。

3)支持集合运算(UNION/INTERSECT/MINUS)

SELECT EMP_ID, PHONE FROM HR.EMP
UNION
SELECT EMP_ID, PHONE FROM HR.EMP_HIS;

多表合并后,敏感列统一脱敏,不再出现 “部分明文、部分掩码”。

4)支持视图、表达式、WITH 子查询

CREATE OR REPLACE VIEW HR.EMP_V AS
SELECT EMP_ID, CONCAT('TEL:', PHONE) PHONE_TEL
FROM HR.EMP;

SELECT * FROM HR.EMP_V;

视图里的表达式列(含脱敏列)自动继承脱敏策略。

5)支持函数索引与扩展统计

-- 23ai 可在脱敏列上建函数索引、收集统计
CREATE INDEX IDX_EMP_PHONE ON HR.EMP(SUBSTR(PHONE,1,7));
EXEC DBMS_STATS.GATHER_TABLE_STATS('HR','EMP');

优化器成本估算正常,脱敏不影响执行计划与性能。

Related Posts