Skip to content

Oracle 敏感数据保护

敏感数据概述

敏感数据定义

敏感数据是指需要特殊保护的信息,泄露可能导致法律责任、财务损失或声誉损害。常见的敏感数据类型包括:

  • 个人身份信息(PII): 姓名、身份证号、电话号码、邮箱地址
  • 财务信息: 银行账号、信用卡号、薪资信息
  • 健康信息: 病历、诊断结果、医疗保险信息
  • 企业秘密: 商业计划、客户名单、知识产权
  • 认证信息: 密码哈希、密钥、证书

敏感数据分类

根据敏感程度和保护要求,敏感数据可分为:

分类描述示例保护要求
机密最高级别,泄露会造成严重损害核心商业秘密、密码哈希严格访问控制、加密存储和传输
敏感泄露会造成较大损害客户PII、财务数据访问控制、加密、审计
内部仅供内部使用内部报告、员工信息基本访问控制、审计
公开可公开访问产品信息、公开文档基本保护

敏感数据发现与分类

数据发现方法

1. 自动发现工具

Oracle 提供多种工具用于自动发现敏感数据:

sql
-- 使用 Oracle Data Redaction 发现敏感数据
BEGIN
  DBMS_REDACT.DISCOVER_DATA(
    schema_name => 'HR',
    table_name => 'EMPLOYEES',
    column_name => 'SSN',
    redaction_type => DBMS_REDACT.FULL,
    regex_pattern => '^\d{3}-\d{2}-\d{4}$'
  );
END;
/

2. 数据字典查询

sql
-- 查询可能包含敏感数据的列
SELECT owner, table_name, column_name, data_type
FROM dba_tab_columns
WHERE column_name IN ('SSN', 'SALARY', 'CREDIT_CARD', 'EMAIL', 'PHONE')
   OR UPPER(column_name) LIKE '%PII%'
   OR UPPER(column_name) LIKE '%SECURE%'
   OR UPPER(column_name) LIKE '%CONFIDENTIAL%';

3. Oracle Enterprise Manager (OEM)

使用 OEM 的敏感数据发现功能:

  • 导航到 Security -> Data Masking and Subsetting
  • 运行敏感数据发现作业
  • 查看发现结果并进行分类

数据分类策略

  1. 建立分类标准: 定义明确的数据分类规则和保护要求
  2. 自动化分类: 使用工具自动发现和分类敏感数据
  3. 定期审核: 定期重新评估数据分类,适应业务变化
  4. 元数据管理: 在数据字典中记录数据分类信息
  5. 数据 lineage: 跟踪敏感数据的流动和使用

敏感数据保护技术

数据脱敏

数据脱敏用于在非生产环境中替换敏感数据,同时保留数据的格式和特征:

sql
-- 使用 Oracle Data Redaction 实现数据脱敏
BEGIN
  DBMS_REDACT.ADD_POLICY(
    object_schema => 'HR',
    object_name => 'EMPLOYEES',
    policy_name => 'EMPLOYEES_REDACTION_POLICY',
    column_name => 'SSN',
    function_type => DBMS_REDACT.FULL
  );
END;
/

-- 部分脱敏(显示前3位和后4位)
BEGIN
  DBMS_REDACT.ALTER_POLICY(
    object_schema => 'HR',
    object_name => 'EMPLOYEES',
    policy_name => 'EMPLOYEES_REDACTION_POLICY',
    action => DBMS_REDACT.MODIFY_COLUMN,
    column_name => 'SSN',
    function_type => DBMS_REDACT.PARTIAL,
    function_parameters => 'VVVFVVFVVVV,VVV-XX-XXXX,1,3'
  );
END;
/

数据遮罩

数据遮罩用于实时隐藏敏感数据,根据用户权限动态显示:

sql
-- 基于用户角色的数据遮罩
BEGIN
  DBMS_REDACT.ADD_POLICY(
    object_schema => 'HR',
    object_name => 'EMPLOYEES',
    policy_name => 'EMPLOYEES_MASKING_POLICY',
    column_name => 'SALARY',
    function_type => DBMS_REDACT.FULL,
    expression => 'SYS_CONTEXT(''USERENV'', ''SESSION_USER'') <> ''HR_MANAGER'''
  );
END;
/

数据最小化

数据最小化原则:仅收集和保留必要的敏感数据:

sql
-- 定期清理过期敏感数据
DELETE FROM customer_pii
WHERE data_retention_date < SYSDATE;

-- 创建分区表,自动清理过期数据
CREATE TABLE customer_pii (
  customer_id NUMBER,
  pii_data VARCHAR2(100),
  data_retention_date DATE
)
PARTITION BY RANGE (data_retention_date) (
  PARTITION p_current VALUES LESS THAN (SYSDATE + 365),
  PARTITION p_old VALUES LESS THAN (MAXVALUE)
);

-- 定时删除过期分区
ALTER TABLE customer_pii DROP PARTITION p_old;

访问控制与审计

细粒度访问控制

sql
-- 创建细粒度访问控制策略
CREATE OR REPLACE FUNCTION emp_row_level_security (
  schema_name VARCHAR2,
  table_name VARCHAR2
) RETURN VARCHAR2 AS
BEGIN
  RETURN 'department_id = SYS_CONTEXT(''USERENV'', ''CLIENT_INFO'')';
END;
/

-- 应用策略
BEGIN
  DBMS_RLS.ADD_POLICY(
    object_schema => 'HR',
    object_name => 'EMPLOYEES',
    policy_name => 'EMP_ROW_LEVEL_POLICY',
    function_schema => 'SECURITY_ADMIN',
    policy_function => 'emp_row_level_security',
    statement_types => 'SELECT, INSERT, UPDATE, DELETE'
  );
END;
/

-- 设置用户上下文
BEGIN
  DBMS_SESSION.SET_CONTEXT('USERENV', 'CLIENT_INFO', '100');
END;
/

敏感数据审计

sql
-- 启用细粒度审计(FGA)监控敏感数据访问
BEGIN
  DBMS_FGA.ADD_POLICY(
    object_schema => 'HR',
    object_name => 'EMPLOYEES',
    policy_name => 'EMP_SALARY_AUDIT',
    audit_condition => 'SALARY > 100000',
    audit_column => 'SALARY',
    handler_schema => NULL,
    handler_module => NULL,
    enable => TRUE
  );
END;
/

-- 查看FGA审计日志
SELECT event_timestamp, db_user, os_user, object_schema, object_name,
       policy_name, sql_text
FROM dba_fga_audit_trail
WHERE object_name = 'EMPLOYEES'
ORDER BY event_timestamp DESC;

合规性要求

主要合规框架

1. GDPR (欧盟通用数据保护条例)

  • 数据主体权利:访问权、被遗忘权、数据可携带权
  • 数据泄露通知:72小时内通知监管机构
  • 数据保护影响评估(DPIA)
  • 数据处理记录

2. PCI DSS (支付卡行业数据安全标准)

  • 加密存储和传输持卡人数据
  • 访问控制和审计
  • 定期安全测试
  • 漏洞管理

3. HIPAA (健康保险流通与责任法案)

  • 保护电子健康记录(EHR)
  • 访问控制和审计
  • 数据加密
  • 隐私规则和安全规则

合规性实现

sql
-- 实现 GDPR 被遗忘权
CREATE OR REPLACE PROCEDURE implement_right_to_be_forgotten (
  p_customer_id IN NUMBER
) AS
BEGIN
  -- 删除主表数据
  DELETE FROM customers WHERE customer_id = p_customer_id;
  
  -- 删除相关表数据
  DELETE FROM customer_orders WHERE customer_id = p_customer_id;
  DELETE FROM customer_pii WHERE customer_id = p_customer_id;
  
  -- 清理审计日志中的个人信息
  UPDATE audit_log 
  SET user_data = 'REDACTED' 
  WHERE customer_id = p_customer_id;
  
  COMMIT;
END;
/

Oracle 19c vs 21c 敏感数据保护差异

Oracle 19c 敏感数据保护特性

  • 支持数据脱敏和遮罩
  • 细粒度审计(FGA)
  • 基本的敏感数据发现
  • 静态数据加密(TDE)

Oracle 21c 增强特性

1. 增强的数据发现

  • 自动发现敏感数据的机器学习算法
  • 预定义的敏感数据类型模板
  • 跨数据库的数据发现

2. 高级数据遮罩

  • 动态数据遮罩增强
  • 支持更多遮罩类型和格式
  • 基于机器学习的智能遮罩

3. 隐私中心

  • 统一的隐私管理界面
  • 自动化的合规性报告
  • 数据主体权利自动化处理

4. 增强的审计功能

  • 更细粒度的审计选项
  • 审计日志加密和完整性保护
  • 更长的审计日志保留期

版本迁移注意事项

  • 从 19c 升级到 21c 时,现有数据脱敏和审计策略自动迁移
  • 建议升级后启用 21c 新的敏感数据发现功能
  • 考虑使用 21c 的隐私中心简化合规管理

敏感数据管理流程

1. 数据分类与标记

  • 建立数据分类标准
  • 标记敏感数据
  • 记录数据分类信息

2. 访问控制

  • 实施最小权限原则
  • 基于角色的访问控制
  • 定期审查访问权限

3. 数据保护

  • 加密存储和传输
  • 数据脱敏和遮罩
  • 数据最小化

4. 审计与监控

  • 审计敏感数据访问
  • 监控异常访问模式
  • 定期审计日志分析

5. 事件响应

  • 建立数据泄露响应计划
  • 定期测试响应流程
  • 及时通知相关方

6. 定期评估与改进

  • 定期进行安全评估
  • 更新保护措施
  • 培训员工

敏感数据保护最佳实践

1. 建立数据治理框架

  • 明确数据治理角色和职责
  • 制定数据保护政策和流程
  • 建立数据保护委员会

2. 实施分层保护策略

  • 物理层:安全的数据中心、访问控制
  • 网络层:防火墙、入侵检测、加密传输
  • 数据库层:访问控制、加密、审计
  • 应用层:身份认证、授权、输入验证
  • 数据层:脱敏、遮罩、数据最小化

3. 定期培训和意识提升

  • 对员工进行敏感数据保护培训
  • 定期进行钓鱼测试
  • 建立安全意识计划

4. 自动化和集成

  • 自动化敏感数据发现和分类
  • 集成安全工具和流程
  • 建立集中式安全管理平台

5. 定期测试和评估

  • 定期进行渗透测试
  • 进行数据泄露模拟演练
  • 定期审查安全控制措施

常见问题(FAQ)

Q: 如何识别数据库中的敏感数据?

A: 可以使用以下方法:

  • 自动发现工具:Oracle Data Redaction、Oracle Enterprise Manager
  • 数据字典查询:基于列名和数据类型
  • 正则表达式:匹配特定格式的数据(如信用卡号、SSN)
  • 业务知识:与业务团队合作识别敏感数据

Q: 如何平衡数据保护和业务需求?

A:

  • 实施基于角色的数据访问控制
  • 使用数据脱敏和遮罩技术
  • 遵循数据最小化原则
  • 定期评估和调整保护措施

Q: 如何处理敏感数据的备份和恢复?

A:

  • 加密备份数据
  • 限制备份访问权限
  • 定期测试恢复流程
  • 确保备份符合合规要求

Q: Oracle 21c 的隐私中心有什么优势?

A:

  • 统一管理所有隐私相关功能
  • 自动化合规性报告生成
  • 简化数据主体权利处理
  • 提供可视化的隐私风险评估

Q: 如何实施 GDPR 的被遗忘权?

A:

  • 建立数据映射,了解数据流向
  • 创建自动化流程处理删除请求
  • 确保所有副本数据都被删除
  • 记录删除操作

Q: 如何防止内部人员泄露敏感数据?

A:

  • 实施最小权限原则
  • 启用细粒度审计
  • 监控异常访问模式
  • 进行背景调查和定期审查
  • 建立数据泄露检测机制

总结

敏感数据保护是 Oracle 数据库安全的重要组成部分,涉及数据发现、分类、访问控制、加密、审计等多个方面。随着合规要求的不断提高,组织需要建立全面的数据保护框架,结合技术手段和管理流程,确保敏感数据的安全。Oracle 21c 提供了更强大的敏感数据保护功能,包括增强的数据发现、高级数据遮罩和隐私中心,帮助组织更有效地保护敏感数据并满足合规要求。