一、Oracle Data Redaction 核心功能
Data Redaction 是 Oracle 数据库(12c 及以上版本)的高级安全特性,用于在查询返回结果时动态改写敏感数据,而无需修改底层存储的数据。
其主要特点包括:
1 实时动态改写
在 SQL 执行结果的最后阶段(返回客户端前)应用改写策略。
2 透明性
不影响数据存储格式、数据类型或后端约束(如触发器、外键)。
3 精细控制
基于用户会话、应用程序上下文等条件触发策略。
五种改写类型
类型 适用场景 示例效果 支持数据类型
FULL 全字段改写 数字→0,字符→空格,日期→2001-01-01 所有类型
PARTIAL 部分遮蔽(固定长度) 123-45-6789 → ***-**-6789 字符、数字
REGEXP 基于正则表达式匹配的遮蔽 邮箱 test@example.com → ****@****.com 仅字符类型
RANDOM 生成随机值替换原数据 数字 1000 → 8392 所有类型
NONE 测试策略逻辑(无实际改写) 显示原始数据,用于策略验证 所有类型
-- 创建测试用户及表
CREATE USER demo_user IDENTIFIED BY demo_pass;
GRANT CONNECT, RESOURCE TO demo_user;
CREATE TABLE demo_user.employees (
employee_id NUMBER,
full_name VARCHAR2(50),
ssn VARCHAR2(11) -- 格式: 000-00-0000
);
INSERT INTO demo_user.employees VALUES (1, 'Alice Smith', '123-45-6789');
COMMIT;
-- 添加策略
BEGIN
DBMS_REDACT.ADD_POLICY(
object_schema => 'DEMO_USER',
object_name => 'EMPLOYEES',
column_name => 'SSN',
policy_name => 'REDACT_SSN',
function_type => DBMS_REDACT.PARTIAL,
function_parameters => 'VVVFVVFVVVV,VVV-VV-VVVV,*,1,5', -- 关键:长度均为11
expression => 'SYS_CONTEXT(''USERENV'', ''SESSION_USER'') != ''HR_ADMIN'''
);
END;
/
-- 普通用户查询
SELECT ssn FROM demo_user.employees;
-- 结果:***-**-6789
-- HR_ADMIN 用户查询
SELECT ssn FROM demo_user.employees;
-- 结果:123-45-6789(原始数据)
-- 在现有策略中新增(EMPLOYEE_ID)列随机遮蔽
BEGIN
DBMS_REDACT.ALTER_POLICY(
object_schema => 'DEMO_USER',
object_name => 'EMPLOYEES',
policy_name => 'REDACT_SSN',
action => DBMS_REDACT.ADD_COLUMN,
column_name => 'EMPLOYEE_ID',
function_type => DBMS_REDACT.RANDOM
);
END;
/
查询
SQL> select * from demo_user.employees;
EMPLOYEE_ID FULL_NAME SSN
----------- -------------------------------------------------- -----------
4 Alice Smith ***-**-6789
SQL> select * from demo_user.employees;
EMPLOYEE_ID FULL_NAME SSN
----------- -------------------------------------------------- -----------
2 Alice Smith ***-**-6789
-- 修改策略
BEGIN
DBMS_REDACT.ALTER_POLICY(
object_schema => 'DEMO_USER',
object_name => 'EMPLOYEES',
policy_name => 'REDACT_SSN',
action => DBMS_REDACT.MODIFY_COLUMN,
column_name => 'SSN',
function_type => DBMS_REDACT.RANDOM
);
END;
/
查询
select * from demo_user.employees;
EMPLOYEE_ID FULL_NAME SSN
----------- -------------------------------------------------- -----------
7 Alice Smith -ku,/2Y85s}
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




