本教程详细介绍Oracle数据库的敏感数据发现技术,包括敏感数据的识别、分类、管理和最佳实践。风哥教程参考Oracle官方文档Security部分,旨在帮助数据库管理员识别和保护敏感数据,满足合规要求。
内容大纲
Part01-基础概念与理论知识
1.1 敏感数据发现概述
敏感数据发现是指识别和分类数据库中包含的敏感信息的过程。敏感数据发现的主要目的是:
- 识别数据库中的敏感数据
- 对敏感数据进行分类
- 评估敏感数据的风险
- 实施适当的保护措施
- 满足合规要求
1.2 敏感数据类型
常见的敏感数据类型包括:
- 个人身份信息(PII):姓名、身份证号、电话号码、地址等
- 财务信息:银行账号、信用卡号、税务信息等
- 健康信息:医疗记录、健康状况等
- 商业机密:知识产权、商业计划、客户列表等
- 认证信息:密码、安全令牌等
Part02-生产环境规划与建议
2.1 敏感数据发现策略制定
制定敏感数据发现策略时,需要考虑以下因素:
- 敏感数据的定义和分类标准
- 发现方法和工具的选择
- 扫描的范围和频率
- 结果的分析和处理流程
- 合规要求的满足
2.2 敏感数据发现方法
常见的敏感数据发现方法包括:
- 模式匹配:使用正则表达式匹配敏感数据格式
- 数据字典分析:基于数据字典信息识别敏感数据
- 内容分析:分析数据内容识别敏感信息
- 机器学习:使用机器学习算法识别敏感数据
- 人工审查:通过人工审查识别敏感数据
Part03-生产环境项目实施方案
3.1 使用SQL查询进行敏感数据发现
使用SQL查询识别敏感数据:
SQL> SELECT owner, table_name, column_name
2 FROM dba_tab_columns
3 WHERE column_name LIKE ‘%ID%’ OR column_name LIKE ‘%CARD%’
4 AND data_type = ‘VARCHAR2’
5 AND data_length = 18;
OWNER TABLE_NAME COLUMN_NAME
———- —————————— ——————————
FGEDU CUSTOMERS ID_CARD
HR EMPLOYEES ID_CARD
SQL> — 识别电话号码
SQL> SELECT owner, table_name, column_name
2 FROM dba_tab_columns
3 WHERE column_name LIKE ‘%PHONE%’ OR column_name LIKE ‘%TEL%’
4 AND data_type = ‘VARCHAR2’
5 AND data_length BETWEEN 10 AND 20;
OWNER TABLE_NAME COLUMN_NAME
———- —————————— ——————————
FGEDU CUSTOMERS PHONE
HR EMPLOYEES PHONE
SQL> — 识别银行账号
SQL> SELECT owner, table_name, column_name
2 FROM dba_tab_columns
3 WHERE column_name LIKE ‘%BANK%’ OR column_name LIKE ‘%ACCOUNT%’
4 AND data_type = ‘VARCHAR2’
5 AND data_length BETWEEN 16 AND 20;
OWNER TABLE_NAME COLUMN_NAME
———- —————————— ——————————
FGEDU CUSTOMERS BANK_ACCOUNT
FINANCE ACCOUNTS ACCOUNT_NUMBER
3.2 使用Oracle Enterprise Manager进行敏感数据发现
使用Oracle Enterprise Manager进行敏感数据发现:
$ emctl start dbconsole
Oracle Enterprise Manager 13c Database Control Release 19.0.0.0.0
Copyright (c) 1996, 2019 Oracle Corporation. All rights reserved.
Starting Oracle Enterprise Manager 13c Database Control …………………………… started.
——————————————————————
Logs are generated in directory /oracle/app/oracle/product/19.0.0/dbhome_1/localhost_fgedudb/sysman/log
# 访问Oracle Enterprise Manager
# 打开浏览器访问: https://localhost:1158/em
在Oracle Enterprise Manager中,导航到”Security” > “Data Redaction” > “Sensitive Data Discovery”,可以执行以下操作:
- 创建敏感数据发现策略
- 配置敏感数据类型
- 执行敏感数据扫描
- 查看扫描结果
- 生成敏感数据报告
Part04-生产案例与实战讲解
4.1 敏感数据扫描案例
使用Oracle Data Redaction进行敏感数据发现:
SQL> BEGIN
2 DBMS_REDACT.ADD_POLICY(
3 object_schema => ‘FGEDU’,
4 object_name => ‘CUSTOMERS’,
5 policy_name => ‘CUSTOMERS_SENSITIVE_DATA’,
6 column_name => ‘ID_CARD’,
7 function_type => DBMS_REDACT.FULL,
8 expression => ‘1=1’
9 );10 END;11 /
PL/SQL procedure successfully completed.
SQL> — 添加更多敏感列
SQL> BEGIN
2 DBMS_REDACT.ALTER_POLICY(
3 object_schema => ‘FGEDU’,
4 object_name => ‘CUSTOMERS’,
5 policy_name => ‘CUSTOMERS_SENSITIVE_DATA’,
6 action => DBMS_REDACT.ADD_COLUMN,
7 column_name => ‘PHONE’,
8 function_type => DBMS_REDACT.PARTIAL,
9 function_parameters => ‘VVVVFVVVV’,
10 expression => ‘1=1’
11 );12 END;13 /
PL/SQL procedure successfully completed.
SQL> — 查看敏感数据策略
SQL> SELECT * FROM REDACTION_POLICIES
2 WHERE object_owner = ‘FGEDU’;
OBJECT_OWNER OBJECT_NAME POLICY_NAME EXPRESSION ENABLED
———— —————————— —————————— ———- ——–
FGEDU CUSTOMERS CUSTOMERS_SENSITIVE_DATA 1=1 YES
SQL> — 查看敏感数据列
SQL> SELECT * FROM REDACTION_COLUMNS
2 WHERE object_owner = ‘FGEDU’;
OBJECT_OWNER OBJECT_NAME POLICY_NAME COLUMN_NAME FUNCTION_TYPE FUNCTION_PARAMETERS
———— —————————— —————————— ——————– —————- ——————–
FGEDU CUSTOMERS CUSTOMERS_SENSITIVE_DATA ID_CARD FULL
FGEDU CUSTOMERS CUSTOMERS_SENSITIVE_DATA PHONE PARTIAL VVVVVVVVVV
4.2 敏感数据分类案例
创建敏感数据分类报告:
$ cat sensitive_data_discovery.sh
#!/bin/bash
# sensitive_data_discovery.sh
# from:www.itpux.com.qq113257174.wx:itpux-com
# web: http://www.fgedu.net.cn
# 配置参数
DB_CONN=”system/password@fgedudb”
OUTPUT_FILE=”sensitive_data_report.txt”
# 清空输出文件
> $OUTPUT_FILE
echo “敏感数据发现报告” >> $OUTPUT_FILE
echo “生成时间: $(date)” >> $OUTPUT_FILE
echo “” >> $OUTPUT_FILE
# 识别身份证号
echo “1. 身份证号” >> $OUTPUT_FILE
sqlplus -s $DB_CONN << EOF >> $OUTPUT_FILE
SET PAGESIZE 0
SET FEEDBACK OFF
SELECT owner || ‘.’ || table_name || ‘.’ || column_name
FROM dba_tab_columns
WHERE column_name LIKE ‘%ID%’ OR column_name LIKE ‘%CARD%’
AND data_type = ‘VARCHAR2’
AND data_length = 18;EOF
echo “” >> $OUTPUT_FILE
# 识别电话号码
echo “2. 电话号码” >> $OUTPUT_FILE
sqlplus -s $DB_CONN << EOF >> $OUTPUT_FILE
SET PAGESIZE 0
SET FEEDBACK OFF
SELECT owner || ‘.’ || table_name || ‘.’ || column_name
FROM dba_tab_columns
WHERE column_name LIKE ‘%PHONE%’ OR column_name LIKE ‘%TEL%’
AND data_type = ‘VARCHAR2’
AND data_length BETWEEN 10 AND 20;EOF
echo “” >> $OUTPUT_FILE
# 识别银行账号
echo “3. 银行账号” >> $OUTPUT_FILE
sqlplus -s $DB_CONN << EOF >> $OUTPUT_FILE
SET PAGESIZE 0
SET FEEDBACK OFF
SELECT owner || ‘.’ || table_name || ‘.’ || column_name
FROM dba_tab_columns
WHERE column_name LIKE ‘%BANK%’ OR column_name LIKE ‘%ACCOUNT%’
AND data_type = ‘VARCHAR2’
AND data_length BETWEEN 16 AND 20;EOF
echo “” >> $OUTPUT_FILE
echo “敏感数据发现报告生成完成: $OUTPUT_FILE”
# 赋予执行权限
$ chmod +x sensitive_data_discovery.sh
# 运行敏感数据发现脚本
$ ./sensitive_data_discovery.sh
敏感数据发现报告生成完成: sensitive_data_report.txt
# 查看报告
$ cat sensitive_data_report.txt
敏感数据发现报告
生成时间: Wed Mar 31 10:00:00 CST 2026
1. 身份证号
FGEDU.CUSTOMERS.ID_CARD
HR.EMPLOYEES.ID_CARD
2. 电话号码
FGEDU.CUSTOMERS.PHONE
HR.EMPLOYEES.PHONE
3. 银行账号
FGEDU.CUSTOMERS.BANK_ACCOUNT
FINANCE.ACCOUNTS.ACCOUNT_NUMBER
Part05-风哥经验总结与分享
5.1 敏感数据发现最佳实践
- 建立敏感数据定义和分类标准
- 定期执行敏感数据扫描
- 使用自动化工具提高发现效率
- 结合多种发现方法提高准确性
- 对发现的敏感数据实施适当的保护措施
- 建立敏感数据管理的持续改进机制
- 定期更新敏感数据发现策略
- 文档化敏感数据发现和管理流程
5.2 常见敏感数据发现问题与解决方案
问题1:敏感数据识别不准确
解决方案:使用多种发现方法,结合模式匹配和内容分析,提高识别准确性。
问题2:敏感数据发现效率低下
解决方案:使用自动化工具,优化扫描策略,减少扫描范围和时间。
问题3:敏感数据保护措施不足
解决方案:根据敏感数据类型选择适当的保护措施,如数据加密、数据脱敏等。
问题4:合规要求满足困难
解决方案:了解相关合规要求,建立符合要求的敏感数据管理流程,定期进行合规审计。
本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html
