数据脱敏策略
1.Oracle 数据脱敏使您能够屏蔽从应用程序发出的查询返回的数据。
2.当您必须隐藏应用程序和应用程序用户必须访问的敏感数据时,请使用 Oracle 数据脱敏。
优点:
-
您有不同的类型可供选择。
-
由于数据在运行时进行编辑,因此非常适合数据不断变化的环境。
-
您可以在一个集中位置创建数据编辑策略,并从那里轻松管理它们。
-
使您能够基于值创建各种函数条件
SYS_CONTEXT
,这些条件可在运行时用于决定何时将数据脱敏策略应用于应用程序用户查询的结果。
脱敏类型:
-
全部(DBMS_REDACT.FULL)。 您编辑列数据的所有内容。返回给查询应用程序用户的编辑值取决于列的数据类型。例如,
NUMBER
数据类型的列用零 (0
) 进行编辑,字符数据类型用单个空格进行编辑。 -
部分(DBMS_REDACT.PARTIAL)。 您编辑了部分列数据。例如,您可以用星号 (*) 编辑姓名或身份证号码
-
正则表达式(DBMS_REDACT.REGEXP)。 您可以使用正则表达式来查找要编辑的数据模式。例如,您可以使用正则表达式来编辑电子邮件地址,该地址可以具有不同的字符长度。它仅设计用于字符数据。
-
随机值(DBMS_REDACT.RANDOM)。 呈现给查询应用程序用户的编辑数据每次显示时都会显示为随机生成的值,具体取决于列的数据类型。
规划脱敏策略:
-
确保您已被授予
EXECUTE
对DBMS_REDACT
PL/SQL 包的权限。 -
确定要脱敏的表或视图列的数据类型。
-
确定要添加数据脱敏策略的基础对象是否具有依赖对象。如果它确实有依赖对象,那么当数据脱敏策略添加到基础对象时,这些对象将变得无效,并且这些对象在使用时将自动重新编译。
或者,您可以使用
ALTER ... COMPILE
语句自行重新编译它们。请注意,使依赖对象失效(通过在其基础对象上添加数据编辑策略)并导致它们需要重新编译可能会降低整个系统的性能。Oracle 建议您仅在非高峰时段或计划停机期间向具有依赖对象的对象添加数据脱敏策略。 -
决定要执行的密文类型:全部、随机、部分、正则表达式。
-
决定将数据脱敏策略应用到哪些用户。
-
根据此信息,使用该
DBMS_REDACT.ADD_POLICY
过程创建数据脱敏策略。 -
配置策略以包含要脱敏的其他列。
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 ) ;
部分数据脱敏测试:
准备工作:
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 **呀
注意: