Skip to content

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
  • 监控和响应:实时监控、异常检测、响应计划

集中管理

  • 策略集中:集中管理敏感数据保护策略
  • 密钥集中:集中管理加密密钥
  • 审计集中:集中管理审计数据和分析

实施策略

分阶段实施

  1. 评估阶段:识别敏感数据、评估风险、确定合规要求
  2. 规划阶段:制定保护策略、选择工具、设计实施计划
  3. 试点阶段:在小范围内试点保护措施
  4. 全面实施:在整个环境中实施保护措施
  5. 持续改进:定期评估和改进保护措施

优先级设置

  • 高风险数据:优先保护高风险敏感数据
  • 合规要求:优先满足法规要求的保护措施
  • 业务影响:考虑保护措施对业务的影响

监控和审计

实时监控

  • 异常检测:监控异常的敏感数据访问
  • 阈值告警:设置访问阈值,超出时告警
  • 行为分析:分析用户访问模式,识别异常行为

定期审计

  • 合规审计:定期进行合规审计
  • 安全审计:定期进行安全审计
  • 性能审计:定期评估保护措施的性能影响

培训和意识

员工培训

  • 入职培训:新员工的敏感数据保护培训
  • 定期培训:定期更新培训内容
  • 角色培训:针对不同角色的专项培训

安全意识

  • 宣传活动:开展安全意识宣传活动
  • 案例学习:分析数据泄露案例,吸取教训
  • 奖励机制:奖励安全行为,鼓励员工参与

版本差异

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: 识别数据库中敏感数据的方法:

  1. 数据分类:根据业务规则和法规要求对数据进行分类
  2. 自动发现:使用Oracle Data Redaction或第三方工具自动发现敏感数据
  3. 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]$');
  4. 业务流程分析:分析业务流程,识别敏感数据的使用场景
  5. 数据字典分析:分析数据字典中的表结构和列描述

Q2: 如何在保护敏感数据的同时最小化性能影响?

A2: 最小化敏感数据保护对性能影响的策略:

  1. 选择性保护:只对真正敏感的数据实施保护措施
  2. 硬件优化:使用支持加密加速的硬件
  3. 数据库调优
    sql
    -- 优化TDE性能
    ALTER SYSTEM SET encryption_waits_for_buffer_pin = FALSE SCOPE=SPFILE;
    -- 需要重启数据库
  4. 缓存策略:优化缓存设置,减少加密和脱敏操作
  5. 批量处理:对大量数据操作采用批量处理方式
  6. 索引优化:合理设计索引,减少加密列的索引使用
  7. 审计优化:只审计必要的操作和数据

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

A3: 处理敏感数据备份和恢复的策略:

  1. 备份加密
    sql
    -- 使用RMAN备份加密
    RMAN> CONFIGURE ENCRYPTION FOR DATABASE ON;
    RMAN> BACKUP DATABASE PLUS ARCHIVELOG;
  2. 密钥备份:安全备份TDE主密钥
    sql
    -- 导出TDE主密钥
    ADMINISTER KEY MANAGEMENT EXPORT ENCRYPTION KEYS 
      TO 'tde_key_backup.key' 
      IDENTIFIED BY "password";
  3. 备份访问控制:限制对备份的访问
  4. 恢复测试:定期测试备份的恢复过程
  5. 异地备份:考虑备份的地理位置和安全存储

Q4: 如何确保敏感数据保护的合规性?

A4: 确保敏感数据保护合规性的方法:

  1. 法规识别:识别适用的法规和标准(如GDPR、HIPAA、PCI DSS等)
  2. 要求映射:将法规要求映射到具体的保护措施
  3. 合规评估:定期进行合规评估,
    sql
    -- 示例:审计PCI DSS合规性
    CREATE AUDIT POLICY pci_dss_audit
      ACTIONS SELECT, INSERT, UPDATE, DELETE ON payment.cards;
    
    AUDIT POLICY pci_dss_audit;
  4. 文档记录:记录所有保护措施和合规活动
  5. 第三方审计:聘请第三方进行合规审计
  6. 持续监控:持续监控合规状态,及时调整保护措施

Q5: 如何平衡敏感数据保护和数据可用性?

A5: 平衡敏感数据保护和数据可用性的策略:

  1. 分层保护:根据数据敏感度实施不同级别的保护
  2. 访问控制优化
    sql
    -- 示例:基于角色的细粒度访问控制
    CREATE ROLE data_analyst;
    GRANT SELECT ON hr.employees_masked TO data_analyst;
    GRANT data_analyst TO analyst_user;
  3. 数据脱敏:使用数据脱敏技术,在保护敏感数据的同时保留数据的业务价值
  4. 自助服务:提供安全的自助服务机制,方便用户访问非敏感数据
  5. 性能优化:优化保护措施的性能,减少对数据可用性的影响
  6. 用户反馈:收集用户反馈,持续调整保护措施,平衡安全性和可用性
  7. 风险评估:定期进行风险评估,根据风险水平调整保护措施的严格程度