ITPub博客

首页 > 数据库 > Oracle > Oracle Data Redaction 核心功能​

Oracle Data Redaction 核心功能​

原创 Oracle 作者:oracle11111 时间:2025-06-26 11:11:22 0 删除 编辑

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







来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/69924215/viewspace-3089001/ ,如需转载,请注明出处,否则将追究法律责任。

下一篇: Flashback Archive
请登录后发表评论 登录
全部评论

注册时间:2019-05-19

  • 博文量
    81
  • 访问量
    90368