本文详细介绍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):生成测试数据子集
$ 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 脱敏需求分析
在实施数据脱敏前,需要进行需求分析:
- 识别敏感数据:确定需要脱敏的字段和表
- 确定脱敏方法:静态脱敏还是动态脱敏
- 确定脱敏规则:部分脱敏、完全脱敏还是格式保留脱敏
- 确定脱敏范围:开发环境、测试环境还是培训环境
$ 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 静态数据脱敏实施
静态数据脱敏是指在数据复制或导出时进行脱敏处理,主要用于创建测试环境或开发环境的数据集。
$ 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
