1. 首页 > Oracle教程 > 正文

Oracle教程FG195-数据脱敏

本文详细介绍Oracle数据库的数据脱敏技术,包括静态脱敏和动态脱敏的实施方法。风哥教程参考Oracle官方文档Security等内容。学习交流加群风哥微信: itpux-com

Part01-基础概念与理论知识

1.1 数据脱敏概念

数据脱敏是指通过各种技术手段,对敏感数据进行变形、替换或模糊处理,使其在非生产环境中使用时不泄露真实信息,同时保持数据的格式和特征不变。

1.2 数据脱敏方法

常见的数据脱敏方法包括:

  • 静态数据脱敏(SDM):在数据复制或导出时进行脱敏处理
  • 动态数据脱敏(DDM):在数据访问时实时进行脱敏处理
  • 部分脱敏:只对敏感字段的部分内容进行脱敏
  • 完全脱敏:对整个敏感字段进行脱敏
  • 格式保留脱敏:保持数据的格式和特征不变

1.3 Oracle数据脱敏特性

Oracle数据库提供了丰富的数据脱敏功能:

  • 数据编辑(Data Redaction):实时动态脱敏
  • 数据遮罩(Data Masking):静态脱敏
  • 敏感数据发现(Sensitive Data Discovery):自动识别敏感数据
  • 数据子集(Data Subsetting):生成测试数据子集
# 检查Oracle数据脱敏功能
$ sqlplus / as sysdba

SQL*Plus: Release 19.0.0.0.0 – Production on Fri Mar 29 16:00:00 2026
Version 19.12.0.0.0

Copyright (c) 1982, 2021, Oracle. All rights reserved.

Connected to:
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 – Production
Version 19.12.0.0.0

SQL> SELECT parameter, value FROM v$option WHERE parameter LIKE ‘%Data%’ OR parameter LIKE ‘%Redaction%’;PARAMETER VALUE
———————————- ———————–
Advanced Security Option TRUE
Data Mining TRUE
Oracle Data Guard TRUE
Transparent Data Encryption TRUE

SQL> — 检查数据编辑组件状态
SQL> SELECT comp_name, status FROM dba_registry WHERE comp_name LIKE ‘%Redaction%’;no rows selected

SQL> — 数据编辑是Advanced Security Option的一部分,不需要单独安装

Part02-生产环境规划与建议

2.1 脱敏需求分析

在实施数据脱敏前,需要进行需求分析:

  • 识别敏感数据:确定需要脱敏的字段和表
  • 确定脱敏方法:静态脱敏还是动态脱敏
  • 确定脱敏规则:部分脱敏、完全脱敏还是格式保留脱敏
  • 确定脱敏范围:开发环境、测试环境还是培训环境
# 使用Oracle敏感数据发现工具
$ sqlplus / as sysdba

SQL> — 创建敏感数据发现策略
SQL> EXEC DBMS_SENSITIVE_DATA.CREATE_DISCOVERY_POLICY(
2 policy_name => ‘FGEDU_SENSITIVE_DATA_POLICY’,
3 description => ‘Policy to discover sensitive data in FGEDU schema’);PL/SQL procedure successfully completed.

SQL> — 添加敏感数据类型
SQL> EXEC DBMS_SENSITIVE_DATA.ADD_SENSITIVE_TYPE(
2 policy_name => ‘FGEDU_SENSITIVE_DATA_POLICY’,
3 sensitive_type_name => ‘CREDIT_CARD’,
4 data_type => ‘CHARACTER’,
5 pattern_type => ‘REGULAR_EXPRESSION’,
6 pattern_value => ‘^[0-9]{16}$’,
7 description => ‘Credit card numbers’);PL/SQL procedure successfully completed.

SQL> — 执行敏感数据发现
SQL> EXEC DBMS_SENSITIVE_DATA.DISCOVER(
2 policy_name => ‘FGEDU_SENSITIVE_DATA_POLICY’,
3 schema_name => ‘FGEDU’,
4 object_name => ‘%’,
5 sensitive_type => ‘%’,
6 report_name => ‘FGEDU_SENSITIVE_DATA_REPORT’);PL/SQL procedure successfully completed.

SQL> — 查看发现结果
SQL> SELECT table_name, column_name, sensitive_type_name, confidence_score
2 FROM dba_sensitive_data
3 WHERE schema_name = ‘FGEDU’ AND confidence_score > 80
4 ORDER BY confidence_score DESC;TABLE_NAME COLUMN_NAME SENSITIVE_TYPE_NAME CONFIDENCE_SCORE
————– ————– ——————– —————-
CUSTOMERS CREDIT_CARD CREDIT_CARD 95
CUSTOMERS PHONE_NUMBER PHONE_NUMBER 90
EMPLOYEES SSN SOCIAL_SECURITY_NUMBER 98
EMPLOYEES SALARY FINANCIAL_DATA 85

2.2 脱敏策略制定

制定脱敏策略需要考虑以下因素:

  • 数据敏感性:不同敏感级别的数据采用不同的脱敏方法
  • 数据用途:根据数据的使用场景选择合适的脱敏方法
  • 性能影响:动态脱敏会影响查询性能,需要评估性能影响
  • 合规要求:满足相关法律法规的要求

2.3 脱敏实施注意事项

实施数据脱敏时需要注意以下事项:

  • 确保脱敏后的数据仍然可用
  • 确保脱敏过程不可逆
  • 确保脱敏规则一致
  • 定期审计和验证脱敏效果
  • 保护脱敏规则的安全性
生产环境建议:在实施数据脱敏前,建议先在测试环境验证脱敏效果,确保脱敏后的数据仍然满足业务需求,同时不会泄露敏感信息。

更多视频教程www.fgedu.net.cn

学习交流加群风哥QQ113257174

风哥提示:

更多学习教程公众号风哥教程itpux_com

from oracle:www.itpux.com

Part03-生产环境项目实施方案

3.1 静态数据脱敏实施

静态数据脱敏是指在数据复制或导出时进行脱敏处理,主要用于创建测试环境或开发环境的数据集。

# 1. 创建测试用户和表
$ sqlplus / as sysdba

SQL> CREATE USER fgedu_test IDENTIFIED BY “Fgedu_Test123” DEFAULT TABLESPACE fgedu_data TEMPORARY TABLESPACE temp;User created.

SQL> GRANT CONNECT, RESOURCE TO fgedu_test;Grant succeeded.

SQL> — 导出生产数据
SQL> CREATE DIRECTORY data_pump_dir AS ‘/oracle/backup/datapump’;Directory created.

SQL> GRANT READ, WRITE ON DIRECTORY data_pump_dir TO fgedu;Grant succeeded.

$ expdp fgedu/”Fgedu_123″@fgedudb directory=data_pump_dir dumpfile=fgedu_prod.dmp logfile=fgedu_prod_exp.log
schemas=fgedu

Export: Release 19.0.0.0.0 – Production on Fri Mar 29 16:30:00 2026
Version 19.12.0.0.0

Copyright (c) 1982, 2019, Oracle and/or its affiliates. All rights reserved.

Connected to: Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 – Production
Starting “FGEDU”.”SYS_EXPORT_SCHEMA_01″: fgedu/********@fgedudb directory=data_pump_dir dumpfile=fgedu_prod.dmp
logfile=fgedu_prod_exp.log schemas=fgedu
Processing object type SCHEMA_EXPORT/USER
Processing object type SCHEMA_EXPORT/SYSTEM_GRANT
Processing object type SCHEMA_EXPORT/ROLE_GRANT
Processing object type SCHEMA_EXPORT/DEFAULT_ROLE
Processing object type SCHEMA_EXPORT/PRE_SCHEMA/PROCACT_SCHEMA
Processing object type SCHEMA_EXPORT/TABLE/TABLE
Processing object type SCHEMA_EXPORT/TABLE/TABLE_DATA
. . exported “FGEDU”.”CUSTOMERS” 5.671 KB 10 rows
. . exported “FGEDU”.”EMPLOYEES” 6.242 KB 15 rows
Processing object type SCHEMA_EXPORT/TABLE/INDEX/INDEX
Processing object type SCHEMA_EXPORT/TABLE/CONSTRAINT/CONSTRAINT
Processing object type SCHEMA_EXPORT/TABLE/INDEX/STATISTICS/INDEX_STATISTICS
Processing object type SCHEMA_EXPORT/TABLE/STATISTICS/TABLE_STATISTICS
Processing object type SCHEMA_EXPORT/STATISTICS/MARKER
Master table “FGEDU”.”SYS_EXPORT_SCHEMA_01″ successfully loaded/unloaded
******************************************************************************
Dump file set for FGEDU.SYS_EXPORT_SCHEMA_01 is:
/oracle/backup/datapump/fgedu_prod.dmp
Job “FGEDU”.”SYS_EXPORT_SCHEMA_01″ successfully completed at Fri Mar 29 16:32:15 2026 elapsed 0 00:02:15

# 2. 创建脱敏规则文件
$ cat > /oracle/backup/datapump/masking_rules.par << EOF remap_schema=fgedu:fgedu_test transform=oid:n transform=segment_attributes:n remap_data=fgedu.customers.credit_card:fgedu.mask_credit_card remap_data=fgedu.customers.phone_number:fgedu.mask_phone_number remap_data=fgedu.employees.ssn:fgedu.mask_ssn remap_data=fgedu.employees.salary:fgedu.mask_salary EOF # 3. 创建脱敏函数 $ sqlplus / as sysdba SQL> CREATE OR REPLACE
FUNCTION fgedu.mask_credit_card(p_credit_card IN VARCHAR2) RETURN VARCHAR2 IS
2 BEGIN
3 RETURN SUBSTR(p_credit_card, 1, 4) || ‘********’ || SUBSTR(p_credit_card, 13, 4);4 END;5 /Function created.

SQL> CREATE OR REPLACE FUNCTION fgedu.mask_phone_number(p_phone_number IN VARCHAR2) RETURN VARCHAR2 IS
2 BEGIN
3 RETURN SUBSTR(p_phone_number, 1, 3) || ‘****’ || SUBSTR(p_phone_number, 8);4 END;5 /Function created.

SQL> CREATE OR REPLACE FUNCTION fgedu.mask_ssn(p_ssn IN VARCHAR2) RETURN VARCHAR2 IS
2 BEGIN
3 RETURN ‘XXX-XX-‘ || SUBSTR(p_ssn, 8);4 END;5 /Function created. SQL> CREATE OR REPLACE FUNCTION fgedu.mask_salary(p_salary IN NUMBER) RETURN NUMBER IS
2 BEGIN
3 RETURN ROUND(p_salary * 0.8 + DBMS_RANDOM.VALUE(0, p_salary * 0.4), -3);4 END;5 /Function created.

SQL> GRANT EXECUTE ON fgedu.mask_credit_card TO fgedu_test;Grant succeeded.

SQL> GRANT EXECUTE ON fgedu.mask_phone_number TO fgedu_test;

本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html

联系我们

在线咨询:点击这里给我发消息

微信号:itpux-com

工作日:9:30-18:30,节假日休息