外观
Oracle 敏感数据保护
敏感数据保护的重要性
合规性要求
许多行业法规和标准(如GDPR、HIPAA、PCI DSS等)要求企业保护敏感数据,避免数据泄露和滥用。不合规可能导致严重的罚款和声誉损失。
数据价值保护
敏感数据是企业的重要资产,包括客户信息、财务数据、知识产权等。保护这些数据可以维护企业的竞争优势和商业价值。
信任维护
保护敏感数据可以维护客户、合作伙伴和股东的信任,增强企业的品牌形象和市场竞争力。
风险缓解
有效的敏感数据保护可以减少数据泄露的风险,避免因数据泄露导致的财务损失、法律责任和业务中断。
敏感数据识别
数据分类
个人身份信息 (PII)
- 定义:可用于识别个人身份的信息
- 示例:姓名、身份证号、电话号码、电子邮件地址、住址
- 法规要求:GDPR、HIPAA、个人信息保护法等
财务数据
- 定义:与财务相关的敏感信息
- 示例:银行账号、信用卡号、财务报表、交易记录
- 法规要求:PCI DSS、SOX等
健康数据
- 定义:与健康相关的敏感信息
- 示例:医疗记录、健康状况、保险信息
- 法规要求:HIPAA等
商业秘密
- 定义:企业的商业机密信息
- 示例:专利信息、商业计划、客户列表、定价策略
- 法规要求:商业秘密保护法等
识别方法
数据发现工具
- Oracle Data Redaction:内置的数据发现功能
- Oracle Enterprise Data Quality:数据质量和发现工具
- 第三方工具:专门的数据发现和分类工具
手动识别
- 数据字典分析:分析数据库数据字典
- SQL查询:使用SQL查询识别敏感数据
- 业务流程分析:分析业务流程中的敏感数据
自动扫描
- 定期扫描:定期扫描数据库中的敏感数据
- 模式匹配:使用正则表达式识别敏感数据模式
- 机器学习:使用机器学习算法识别敏感数据
敏感数据保护方法
访问控制
基于角色的访问控制 (RBAC)
- 角色定义:根据工作职责定义不同的角色
- 权限分配:将最小必要权限分配给角色
- 用户管理:将用户分配到适当的角色
示例
sql
-- 创建角色
CREATE ROLE hr_manager;
CREATE ROLE finance_user;
-- 分配权限
GRANT SELECT, INSERT, UPDATE ON hr.employees TO hr_manager;
GRANT SELECT ON finance.accounts TO finance_user;
-- 分配角色给用户
GRANT hr_manager TO john;
GRANT finance_user TO mary;细粒度访问控制 (FGAC)
- 行级安全:基于用户身份限制对表中行的访问
- 列级安全:基于用户身份限制对表中列的访问
- 上下文相关访问:基于上下文信息限制访问
示例
sql
-- 创建行级安全策略
BEGIN
DBMS_RLS.ADD_POLICY(
object_schema => 'hr',
object_name => 'employees',
policy_name => 'emp_dept_policy',
function_schema => 'security',
policy_function => 'emp_dept_access',
statement_types => 'SELECT, INSERT, UPDATE, DELETE'
);
END;
/
-- 创建列级安全策略
BEGIN
DBMS_RLS.ADD_POLICY(
object_schema => 'hr',
object_name => 'employees',
policy_name => 'emp_salary_policy',
function_schema => 'security',
policy_function => 'emp_salary_access',
statement_types => 'SELECT',
column_name => 'salary'
);
END;
/数据加密
透明数据加密 (TDE)
- 功能:对存储在数据文件中的数据进行透明加密
- 优势:应用无需修改、透明加密和解密、支持整个表空间加密
- 适用场景:保护静态数据、满足合规要求
配置示例
sql
-- 启用TDE主密钥
ALTER SYSTEM SET ENCRYPTION KEY IDENTIFIED BY "password";
-- 创建加密表空间
CREATE TABLESPACE encrypted_ts
DATAFILE 'encrypted_ts.dbf' SIZE 100M
ENCRYPTION USING 'AES256' DEFAULT STORAGE (ENCRYPT);
-- 创建加密表
CREATE TABLE hr.employees_encrypted (
employee_id NUMBER,
first_name VARCHAR2(50),
last_name VARCHAR2(50),
salary NUMBER
)
TABLESPACE encrypted_ts;
-- 加密现有表
ALTER TABLE hr.employees ENCRYPT;数据红色action (Data Redaction)
- 功能:在查询结果中动态屏蔽敏感数据
- 类型:全屏蔽、部分屏蔽、随机屏蔽、正则表达式屏蔽
- 优势:无需修改应用、动态屏蔽、细粒度控制
配置示例
sql
-- 创建数据红色action策略
BEGIN
DBMS_REDACT.ADD_POLICY(
object_schema => 'hr',
object_name => 'employees',
policy_name => 'emp_salary_redaction',
column_name => 'salary',
function_type => DBMS_REDACT.FULL,
expression => 'SYS_CONTEXT(''USERENV'', ''SESSION_USER'') != ''HR_MANAGER'''
);
END;
/
-- 创建部分屏蔽策略
BEGIN
DBMS_REDACT.ADD_POLICY(
object_schema => 'hr',
object_name => 'employees',
policy_name => 'emp_ssn_redaction',
column_name => 'ssn',
function_type => DBMS_REDACT.PARTIAL,
function_parameters => 'VVVVF,VVVV,XXXX',
expression => 'SYS_CONTEXT(''USERENV'', ''SESSION_USER'') != ''HR_ADMIN'''
);
END;
/应用层加密
- 功能:在应用层面对敏感数据进行加密
- 优势:灵活性高、可自定义加密算法、适用范围广
- 适用场景:特定应用需求、特殊加密要求
示例
sql
-- 使用PL/SQL加密函数
CREATE OR REPLACE FUNCTION encrypt_data(p_data IN VARCHAR2, p_key IN VARCHAR2) RETURN RAW IS
l_encrypted RAW(2000);
BEGIN
l_encrypted := DBMS_CRYPTO.ENCRYPT(
src => UTL_I18N.STRING_TO_RAW(p_data, 'AL32UTF8'),
typ => DBMS_CRYPTO.ENCRYPT_AES256 + DBMS_CRYPTO.CHAIN_CBC + DBMS_CRYPTO.PAD_PKCS5,
key => UTL_I18N.STRING_TO_RAW(p_key, 'AL32UTF8')
);
RETURN l_encrypted;
END;
/
-- 使用PL/SQL解密函数
CREATE OR REPLACE FUNCTION decrypt_data(p_encrypted IN RAW, p_key IN VARCHAR2) RETURN VARCHAR2 IS
l_decrypted VARCHAR2(2000);
BEGIN
l_decrypted := UTL_I18N.RAW_TO_CHAR(
DBMS_CRYPTO.DECRYPT(
src => p_encrypted,
typ => DBMS_CRYPTO.ENCRYPT_AES256 + DBMS_CRYPTO.CHAIN_CBC + DBMS_CRYPTO.PAD_PKCS5,
key => UTL_I18N.STRING_TO_RAW(p_key, 'AL32UTF8')
),
'AL32UTF8'
);
RETURN l_decrypted;
END;
/审计和监控
细粒度审计 (FGA)
- 功能:对敏感数据的访问进行细粒度审计
- 优势:可针对特定操作、特定用户、特定条件进行审计
- 适用场景:监控敏感数据访问、满足合规要求
配置示例
sql
-- 创建细粒度审计策略
BEGIN
DBMS_FGA.ADD_POLICY(
object_schema => 'hr',
object_name => 'employees',
policy_name => 'audit_emp_salary',
audit_condition => 'salary > 10000',
audit_column => 'salary',
handler_schema => NULL,
handler_module => NULL,
enable => TRUE,
statement_types => 'SELECT'
);
END;
/
-- 查看审计记录
SELECT object_schema, object_name, policy_name,
db_user, os_user, userhost,
to_char(timestamp, 'YYYY-MM-DD HH24:MI:SS') AS audit_time,
sql_text
FROM dba_fga_audit_trail
ORDER BY timestamp DESC;统一审计
- 功能:Oracle 12c+ 提供的统一审计功能
- 优势:集中管理审计策略、支持更多审计类型、性能更好
- 适用场景:企业级审计、复杂审计需求
配置示例
sql
-- 启用统一审计
ALTER SYSTEM SET audit_trail = 'DB,EXTENDED' SCOPE=SPFILE;
-- 需要重启数据库
-- 创建统一审计策略
CREATE AUDIT POLICY sensitive_data_audit
ACTIONS SELECT ON hr.employees,
ACTIONS INSERT, UPDATE, DELETE ON finance.accounts;
-- 启用审计策略
AUDIT POLICY sensitive_data_audit;
-- 查看统一审计记录
SELECT audit_type, event_timestamp, dbusername,
object_schema, object_name, action_name,
sql_text
FROM unified_audit_trail
ORDER BY event_timestamp DESC;数据脱敏
静态数据脱敏
- 功能:在数据复制或导出时对敏感数据进行脱敏
- 优势:保护敏感数据,同时保留数据的业务价值
- 适用场景:测试环境、开发环境、数据分析
示例
sql
-- 创建脱敏视图
CREATE OR REPLACE VIEW hr.employees_masked AS
SELECT
employee_id,
first_name,
last_name,
'XXX-XX-' || SUBSTR(ssn, 8) AS ssn,
'***-***-' || SUBSTR(phone_number, 8) AS phone_number,
email,
hire_date,
job_id,
'******' AS salary,
commission_pct,
manager_id,
department_id
FROM hr.employees;
-- 使用Oracle Data Redaction进行静态脱敏
-- 导出脱敏数据
EXPDP system/password@db19c TABLES=hr.employees
DIRECTORY=DATA_PUMP_DIR
DUMPFILE=employees_masked.dmp
TRANSFORM=ACCESS_METHOD:METADATA_TRANSFORM
CONTENT=DATA_ONLY
PARALLEL=4动态数据脱敏
- 功能:在查询时实时对敏感数据进行脱敏
- 优势:无需修改数据存储、实时脱敏、细粒度控制
- 适用场景:生产环境、报告生成、数据分析
示例
sql
-- 使用Oracle Data Redaction进行动态脱敏
BEGIN
DBMS_REDACT.ADD_POLICY(
object_schema => 'hr',
object_name => 'employees',
policy_name => 'emp_dynamic_masking',
column_name => 'email',
function_type => DBMS_REDACT.PARTIAL,
function_parameters => 'EMAIL,1,1,NULL',
expression => 'SYS_CONTEXT(''USERENV'', ''SESSION_USER'') NOT IN (''HR_ADMIN'', ''HR_MANAGER'')'
);
END;
/敏感数据保护工具
Oracle 原生工具
Oracle Advanced Security
- 功能:提供TDE、数据红色action、加密网络传输等功能
- 优势:与Oracle数据库深度集成、易于配置和管理
- 适用场景:企业级敏感数据保护、合规要求高的环境
Oracle Data Redaction
- 功能:动态数据屏蔽
- 优势:无需修改应用、细粒度控制、性能影响小
- 适用场景:生产环境、报告系统、多用户环境
Oracle Database Vault
- 功能:高级访问控制、特权用户管理
- 优势:防止特权用户滥用权限、细粒度访问控制
- 适用场景:高安全要求环境、多租户环境
Oracle Audit Vault and Database Firewall
- 功能:集中审计、数据库活动监控、异常检测
- 优势:集中管理审计数据、实时监控、高级安全分析
- 适用场景:企业级安全监控、合规审计
第三方工具
数据发现和分类工具
- 功能:自动发现和分类敏感数据
- 优势:自动化程度高、支持多种数据源、规则可定制
- 适用场景:大型企业、多系统环境
数据脱敏工具
- 功能:对敏感数据进行脱敏处理
- 优势:支持多种脱敏算法、可视化配置、批量处理
- 适用场景:测试环境、开发环境、数据分析
数据泄露防护 (DLP) 工具
- 功能:监控和防止数据泄露
- 优势:实时监控、多渠道防护、自动响应
- 适用场景:企业级数据安全、合规要求高的环境
敏感数据保护策略
防御纵深
多层防护
- 物理层:数据中心安全、物理访问控制
- 网络层:网络加密、防火墙、入侵检测
- 系统层:操作系统安全、补丁管理
- 数据库层:访问控制、加密、审计
- 应用层:应用安全、身份认证、授权
- 数据层:数据分类、脱敏、销毁
最小权限原则
- 权限分配:只授予用户完成工作所需的最小权限
- 权限审查:定期审查用户权限,移除不必要的权限
- 特权管理:严格控制特权用户,实施职责分离
数据生命周期管理
数据收集
- 必要性评估:评估是否需要收集敏感数据
- 收集限制:只收集必要的敏感数据
- 同意管理:获取用户对数据收集的同意
数据存储
- 加密存储:对敏感数据进行加密存储
- 访问控制:限制对敏感数据的访问
- 备份保护:对敏感数据的备份也进行保护
数据使用
- 目的限制:只将敏感数据用于指定目的
- 数据最小化:在使用中最小化敏感数据的暴露
- 监控使用:监控敏感数据的使用情况
数据销毁
- 安全删除:对不再需要的敏感数据进行安全删除
- 销毁验证:验证敏感数据是否被完全销毁
- 销毁记录:记录敏感数据的销毁过程
合规管理
法规跟踪
- 法规识别:识别适用的法规和标准
- 要求分析:分析法规对敏感数据保护的要求
- 合规评估:定期评估合规状态
文档管理
- 政策文档:制定敏感数据保护政策
- 流程文档:记录敏感数据保护流程
- 合规文档:准备合规审计所需的文档
培训和意识
- 员工培训:对员工进行敏感数据保护培训
- 安全意识:提高员工的安全意识
- 定期更新:定期更新培训内容和安全意识材料
常见问题处理
数据泄露
症状
- 未授权的数据访问或下载
- 异常的数据库活动或查询
- 敏感数据出现在未授权的位置
- 外部报告的数据泄露
原因
- 访问控制不当:权限配置错误或过度授权
- 密码泄露:用户密码被破解或泄露
- 安全漏洞:数据库或应用存在安全漏洞
- 内部威胁:内部员工故意或过失导致数据泄露
- 社会工程学:通过欺骗手段获取敏感信息
解决方案
- 立即响应:启动数据泄露响应计划
- 隔离:隔离受影响的系统,防止进一步泄露
- 调查:确定数据泄露的范围和原因
- 通知:根据法规要求通知相关方
- 修复:修复导致数据泄露的漏洞
- 加强防护:实施额外的安全措施
性能影响
症状
- 加密操作导致数据库性能下降
- 审计操作导致系统负载增加
- 数据红色action导致查询响应时间变长
原因
- 加密开销:TDE和应用层加密的计算开销
- 审计开销:审计操作的存储和处理开销
- 数据处理:数据脱敏和红色action的处理开销
解决方案
- 性能调优:优化数据库参数和配置
- 硬件升级:增加CPU和内存资源
- 选择性保护:只对真正敏感的数据实施保护
- 缓存优化:优化缓存策略,减少加密和脱敏操作
- 分批处理:对大量数据的操作采用分批处理
密钥管理
症状
- 密钥丢失:无法解密加密数据
- 密钥泄露:加密密钥被未授权获取
- 密钥轮换困难:无法安全地轮换加密密钥
原因
- 密钥备份不当:密钥未进行安全备份
- 密钥存储不安全:密钥存储在不安全的位置
- 密钥管理流程不完善:缺乏密钥轮换和审计流程
解决方案
- 密钥备份:安全备份加密密钥,存储在多个安全位置
- 密钥管理系统:使用专业的密钥管理系统
- 密钥轮换:建立定期密钥轮换流程
- 访问控制:严格控制对密钥的访问
- 审计:审计密钥的使用和管理操作
应用兼容性
症状
- 应用无法处理加密数据
- 应用无法正确显示脱敏数据
- 应用性能在实施保护措施后下降
原因
- 应用设计未考虑加密:应用代码假设数据未加密
- 数据格式变化:脱敏后的数据格式与应用期望不符
- 性能设计不足:应用未考虑保护措施的性能影响
解决方案
- 应用修改:修改应用以适应加密和脱敏数据
- 中间层处理:在应用和数据库之间添加中间层处理数据格式
- 性能优化:优化应用代码,减少对敏感数据的频繁访问
- 测试:在实施保护措施前进行充分测试
最佳实践
敏感数据保护架构
分层架构
- 外围防护:网络防火墙、入侵检测系统
- 访问控制:身份认证、授权、审计
- 数据保护:加密、脱敏、红色action
- 监控和响应:实时监控、异常检测、响应计划
集中管理
- 策略集中:集中管理敏感数据保护策略
- 密钥集中:集中管理加密密钥
- 审计集中:集中管理审计数据和分析
实施策略
分阶段实施
- 评估阶段:识别敏感数据、评估风险、确定合规要求
- 规划阶段:制定保护策略、选择工具、设计实施计划
- 试点阶段:在小范围内试点保护措施
- 全面实施:在整个环境中实施保护措施
- 持续改进:定期评估和改进保护措施
优先级设置
- 高风险数据:优先保护高风险敏感数据
- 合规要求:优先满足法规要求的保护措施
- 业务影响:考虑保护措施对业务的影响
监控和审计
实时监控
- 异常检测:监控异常的敏感数据访问
- 阈值告警:设置访问阈值,超出时告警
- 行为分析:分析用户访问模式,识别异常行为
定期审计
- 合规审计:定期进行合规审计
- 安全审计:定期进行安全审计
- 性能审计:定期评估保护措施的性能影响
培训和意识
员工培训
- 入职培训:新员工的敏感数据保护培训
- 定期培训:定期更新培训内容
- 角色培训:针对不同角色的专项培训
安全意识
- 宣传活动:开展安全意识宣传活动
- 案例学习:分析数据泄露案例,吸取教训
- 奖励机制:奖励安全行为,鼓励员工参与
版本差异
Oracle 11g
敏感数据保护功能
- TDE:支持表空间加密和列加密
- 细粒度审计:支持基于条件的审计
- 数据红色action:基本的数据屏蔽功能
- 访问控制:基于角色的访问控制
限制
- 统一审计:不支持统一审计功能
- 高级数据红色action:数据屏蔽功能有限
- 密钥管理:密钥管理功能相对简单
Oracle 12c及以上
增强功能
- 统一审计:提供统一的审计框架
- 高级数据红色action:增强的数据屏蔽功能
- 多租户支持:支持多租户环境的敏感数据保护
- 透明数据加密增强:支持更多加密算法和选项
- Oracle Database Vault:更强大的访问控制功能
新特性
sql
-- Oracle 12c+ 多租户环境的敏感数据保护
-- 在PDB级别配置TDE
ALTER SESSION SET CONTAINER = pdb1;
ALTER SYSTEM SET ENCRYPTION KEY IDENTIFIED BY "password";
-- Oracle 12c+ 增强的数据红色action
BEGIN
DBMS_REDACT.ADD_POLICY(
object_schema => 'hr',
object_name => 'employees',
policy_name => 'emp_email_redaction',
column_name => 'email',
function_type => DBMS_REDACT.REGEXP,
function_parameters => 'EMAIL,\w+@(\w+\.)+\w+,,***@\2',
expression => 'SYS_CONTEXT(''USERENV'', ''SESSION_USER'') NOT IN (''HR_ADMIN'')'
);
END;
/常见问题(FAQ)
Q1: 如何识别数据库中的敏感数据?
A1: 识别数据库中敏感数据的方法:
- 数据分类:根据业务规则和法规要求对数据进行分类
- 自动发现:使用Oracle Data Redaction或第三方工具自动发现敏感数据
- SQL查询:使用SQL查询识别符合敏感数据模式的数据sql
-- 示例:查找可能的信用卡号 SELECT * FROM customers WHERE REGEXP_LIKE(credit_card, '^[0-9]{16}$'); -- 示例:查找可能的身份证号 SELECT * FROM employees WHERE REGEXP_LIKE(id_number, '^[0-9]{17}[0-9Xx]$'); - 业务流程分析:分析业务流程,识别敏感数据的使用场景
- 数据字典分析:分析数据字典中的表结构和列描述
Q2: 如何在保护敏感数据的同时最小化性能影响?
A2: 最小化敏感数据保护对性能影响的策略:
- 选择性保护:只对真正敏感的数据实施保护措施
- 硬件优化:使用支持加密加速的硬件
- 数据库调优:sql
-- 优化TDE性能 ALTER SYSTEM SET encryption_waits_for_buffer_pin = FALSE SCOPE=SPFILE; -- 需要重启数据库 - 缓存策略:优化缓存设置,减少加密和脱敏操作
- 批量处理:对大量数据操作采用批量处理方式
- 索引优化:合理设计索引,减少加密列的索引使用
- 审计优化:只审计必要的操作和数据
Q3: 如何处理敏感数据的备份和恢复?
A3: 处理敏感数据备份和恢复的策略:
- 备份加密:sql
-- 使用RMAN备份加密 RMAN> CONFIGURE ENCRYPTION FOR DATABASE ON; RMAN> BACKUP DATABASE PLUS ARCHIVELOG; - 密钥备份:安全备份TDE主密钥sql
-- 导出TDE主密钥 ADMINISTER KEY MANAGEMENT EXPORT ENCRYPTION KEYS TO 'tde_key_backup.key' IDENTIFIED BY "password"; - 备份访问控制:限制对备份的访问
- 恢复测试:定期测试备份的恢复过程
- 异地备份:考虑备份的地理位置和安全存储
Q4: 如何确保敏感数据保护的合规性?
A4: 确保敏感数据保护合规性的方法:
- 法规识别:识别适用的法规和标准(如GDPR、HIPAA、PCI DSS等)
- 要求映射:将法规要求映射到具体的保护措施
- 合规评估:定期进行合规评估,sql
-- 示例:审计PCI DSS合规性 CREATE AUDIT POLICY pci_dss_audit ACTIONS SELECT, INSERT, UPDATE, DELETE ON payment.cards; AUDIT POLICY pci_dss_audit; - 文档记录:记录所有保护措施和合规活动
- 第三方审计:聘请第三方进行合规审计
- 持续监控:持续监控合规状态,及时调整保护措施
Q5: 如何平衡敏感数据保护和数据可用性?
A5: 平衡敏感数据保护和数据可用性的策略:
- 分层保护:根据数据敏感度实施不同级别的保护
- 访问控制优化:sql
-- 示例:基于角色的细粒度访问控制 CREATE ROLE data_analyst; GRANT SELECT ON hr.employees_masked TO data_analyst; GRANT data_analyst TO analyst_user; - 数据脱敏:使用数据脱敏技术,在保护敏感数据的同时保留数据的业务价值
- 自助服务:提供安全的自助服务机制,方便用户访问非敏感数据
- 性能优化:优化保护措施的性能,减少对数据可用性的影响
- 用户反馈:收集用户反馈,持续调整保护措施,平衡安全性和可用性
- 风险评估:定期进行风险评估,根据风险水平调整保护措施的严格程度
