Oracle Data Redaction 核心功能​

来源:这里教程网 时间:2026-03-03 22:17:38 作者:

一、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}

相关推荐