动态数据脱敏

来源:这里教程网 时间:2026-03-03 18:59:35 作者:

数据脱敏策略

1.Oracle 数据脱敏使您能够屏蔽从应用程序发出的查询返回的数据。

2.当您必须隐藏应用程序和应用程序用户必须访问的敏感数据时,请使用 Oracle 数据脱敏。

优点:

  • 您有不同的类型可供选择。

  • 由于数据在运行时进行编辑,因此非常适合数据不断变化的环境。

  • 您可以在一个集中位置创建数据编辑策略,并从那里轻松管理它们。

  • 使您能够基于值创建各种函数条件 SYS_CONTEXT ,这些条件可在运行时用于决定何时将数据脱敏策略应用于应用程序用户查询的结果。

    脱敏类型:

  • 全部(DBMS_REDACT.FULL)。 您编辑列数据的所有内容。返回给查询应用程序用户的编辑值取决于列的数据类型。例如, NUMBER 数据类型的列用零 ( 0 ) 进行编辑,字符数据类型用单个空格进行编辑。

  • 部分(DBMS_REDACT.PARTIAL)。 您编辑了部分列数据。例如,您可以用星号 (*) 编辑姓名或身份证号码

  • 正则表达式(DBMS_REDACT.REGEXP)。 您可以使用正则表达式来查找要编辑的数据模式。例如,您可以使用正则表达式来编辑电子邮件地址,该地址可以具有不同的字符长度。它仅设计用于字符数据。

  • 随机值(DBMS_REDACT.RANDOM)。 呈现给查询应用程序用户的编辑数据每次显示时都会显示为随机生成的值,具体取决于列的数据类型。

    规划脱敏策略:

    1. 确保您已被授予 EXECUTE DBMS_REDACT PL/SQL 包的权限。

    2. 确定要脱敏的表或视图列的数据类型。

    3. 确定要添加数据脱敏策略的基础对象是否具有依赖对象。如果它确实有依赖对象,那么当数据脱敏策略添加到基础对象时,这些对象将变得无效,并且这些对象在使用时将自动重新编译。

      或者,您可以使用 ALTER ... COMPILE 语句自行重新编译它们。请注意,使依赖对象失效(通过在其基础对象上添加数据编辑策略)并导致它们需要重新编译可能会降低整个系统的性能。Oracle 建议您仅在非高峰时段或计划停机期间向具有依赖对象的对象添加数据脱敏策略。

    4. 决定要执行的密文类型:全部、随机、部分、正则表达式。

    5. 决定将数据脱敏策略应用到哪些用户。

    6. 根据此信息,使用该 DBMS_REDACT.ADD_POLICY 过程创建数据脱敏策略。

    7. 配置策略以包含要脱敏的其他列。

    DBMS_REDACT包

    程序 描述
    DBMS_REDACT.ADD_POLICY 将数据脱敏策略添加到表或视图
    DBMS_REDACT.ALTER_POLICY 修改数据脱敏策略
    DBMS_REDACT.APPLY_POLICY_EXPR_TO_COL 将数据脱敏策略表达式应用于表或视图列
    DBMS_REDACT.CREATE_POLICY_EXPRESSION 创建数据编辑策略表达式
    DBMS_REDACT.DISABLE_POLICY 禁用数据脱敏策略
    DBMS_REDACT.DROP_POLICY 删除数据脱敏策略
    DBMS_REDACT.DROP_POLICY_EXPRESSION 删除数据脱敏策略表达式
    DBMS_REDACT.ENABLE_POLICY 启用数据脱敏策略
    DBMS_REDACT.UPDATE_FULL_REDACTION_VALUES 全局更新给定数据类型的完整密文值。您必须重新启动数据库实例才能使用更新的值。
    DBMS_REDACT.UPDATE_POLICY_EXPRESSION 更新数据脱敏策略表达式

    ADD_POLICY过程语法:

    DBMS_REDACT
    .ADD_POLICY 
    ( 
    
       object_schema 
    IN VARCHAR2 
    :
    = 
    NULL
    , 
    
       object_name 
    IN VARCHAR2
    , 
    
       policy_name 
    IN VARCHAR2
    , 
    
       column_name 
    IN VARCHAR2 
    :
    = 
    NULL
    , 
    
       function_type 
    IN BINARY_INTEGER 
    :
    = DBMS_REDACT
    .FULL
    , 
    
       function_parameters 
    IN VARCHAR2 
    :
    = 
    NULL
    , 
    
       expression 
    IN VARCHAR2
    , 
    
       
    enable 
    IN 
    BOOLEAN 
    : 
    = 
    TRUE
    , 
    
       regexp_pattern 
    IN VARCHAR2 
    :
    = 
    NULL
    , 
    
       regexp_replace_string 
    IN VARCHAR2 
    :
    = 
    NULL
    , 
    
       regexp_position 
    IN BINARY_INTEGER 
    :
    = 
    1
    ,
    
       regexp_occurrence 
    IN BINARY_INTEGER 
    :
    = 
    0
    , 
    
       regexp_match_parameter 
    IN VARCHAR2 
    :
    = 
    NULL
    , 
    
       policy_description 
    IN VARCHAR2 
    :
    = 
    NULL
    , 
    
       column_description 
    IN VARCHAR2 
    :
    = 
    NULL
    )
    ;

    ALTER_POLICY 过程语法:

    DBMS_REDACT
    .ALTER_POLICY 
    ( 
    
       object_schema 
    IN VARCHAR2 
    :
    = 
    NULL
    , 
    
       object_name 
    IN VARCHAR2
    , 
    
       policy_name 
    IN VARCHAR2
    , 
    
       
    action 
    IN BINARY_INTEGER 
    :
    = DBMS_REDACT
    .ADD_COLUMN
    , 
    
       column_name 
    IN VARCHAR2 
    :
    = 
    NULL
    , 
    
       function_type 
    IN BINARY_INTEGER 
    :
    = DBMS_REDACT
    .FULL
    , 
    
       function_parameters 
    IN VARCHAR2 
    :
    = 
    NULL 
    , 
    
       expression 
    IN VARCHAR2
    , 
    
       regexp_pattern 
    IN VARCHAR2 
    :
    = 
    NULL
    , 
    
       regexp_replace_string 
    IN VARCHAR2 
    :
    = 
    NULL
    , 
    
       regexp_position 
    IN BINARY_INTEGER 
    :
    = 
    1
    ,
    
       regexp_occurrence 
    IN BINARY_INTEGER 
    :
    = 
    0
    , 
    
       regexp_match_parameter 
    IN VARCHAR2 
    :
    = 
    NULL
    , 
    
       policy_description 
    IN VARCHAR2 
    :
    = 
    NULL
    , 
    
       column_description 
    IN VARCHAR2 
    :
    = 
    NULL
    )
    ;

    部分数据脱敏测试:

    环境:oracle 19.3

    准备工作:

    1.创建用户wuyang

    -- Create the user 
    
    create user WUYANG
    
      default tablespace USERS
    
      temporary tablespace TEMP
    
      profile DEFAULT;
    
    -- Grant/Revoke system privileges 
    
    grant create any table to WUYANG;
    
    grant create session to WUYANG;
    
    grant select any table to WUYANG;
    
    grant unlimited tablespace to WUYANG;
    
    grant execute on DBMS_REDACT to WUYANG;

    2.在wuyang用户中创建表test

    -- Create table
    
    create table TEST
    
    (
    
      id   NUMBER,
    
      name VARCHAR2(10)
    
    )
    
    tablespace USERS
    
      pctfree 10
    
      initrans 1
    
      maxtrans 255
    
      storage
    
      (
    
        initial 64K
    
        next 1M
    
        minextents 1
    
        maxextents unlimited
    
      );

    3.插入数据

    insert into test (ID, NAME)
    
    values (1, '测试');
    
    insert into test (ID, NAME)
    
    values (2, '你好呀');
    
    
    

    4.执行存储过程

    begin
    
    DBMS_REDACT.ADD_POLICY( 
    
    object_schema => 'WUYANG', 
    
    object_name => 'TEST', 
    
    column_name => 'NAME',
    
    policy_name => 'mask_name',  
    
    function_type => DBMS_REDACT.PARTIAL,
    
    function_parameters => 'VVVVVV,VVVVVV,*,1,2',
    
    expression =>'1=1');
    
    end;
    
    /

    5.查询结果

    wuyang@ORADB 2023-10-04 07:53:52> select * from test;
    
    
    
    
            ID NAME
    
    ---------- --------------------------------------------------------------------------------
    
             1 **
    
             2 **呀
    
    
    

    注意:

    默认情况下sys用户与exempt redaction policy权限用户不受脱敏影响。

  • 相关推荐