找回密码
立即注册
搜索
热搜: Java Python Linux Go
发回帖 发新帖

2152

积分

0

好友

308

主题
发表于 2025-12-25 08:10:35 | 查看: 31| 回复: 0

在传统的数据安全管理中,数据库管理员(DBA)或安全人员常常依赖手工记录和维护来管理敏感数据字段。这种方式不仅效率低下,在面对海量表和频繁的系统变更时,还极易出现遗漏,为数据安全埋下隐患。

Oracle Database 12c 引入的 TSDP(透明敏感数据保护) 功能,旨在从根本上解决这一难题。它提供了一个强大的自动化框架,能够对数据库中的敏感数据进行自动识别和批量保护,极大地提升了数据安全管理的效率和准确性。

核心概念:TSDP是什么?

TSDP 本身并非一种独立的加密或脱敏技术,而是一个集中式的策略管理与自动化执行框架。它将敏感数据的“定义”与“保护”两个环节解耦。

你可以将其理解为一个策略管理中心:

  1. 敏感类型:定义“什么是敏感数据”,即设定识别规则。例如:所有列名包含CARD_NO且数据类型为VARCHAR2的字段,都定义为“信用卡号”类型。
  2. 保护策略:定义“如何保护这类数据”,即指定保护手段。例如:为“信用卡号”类型统一应用数据脱敏策略。

一旦完成策略配置,TSDP即可自动扫描全库,将匹配的列识别出来并统一实施预定义的保护措施。

Oracle TSDP实现敏感数据自动发现与保护:数据安全治理实战配置 - 图片 - 1

TSDP的核心优势

  • 避免遗漏,全面覆盖:基于规则的自动化扫描能够覆盖数据库中的所有对象,包括新建表或历史遗留表,确保没有“漏网之鱼”。
  • 策略统一,一次定义:只需定义一次(如“身份证号的脱敏规则”),此后所有符合特征的列都会自动应用同一策略,保障了安全策略的一致性。
  • 灵活扩展,便于维护:保护手段(如脱敏、加密)与数据分类解耦。当合规要求变化时,仅需在TSDP层面更新保护策略,即可批量升级所有相关列的保护方式,无需逐个修改应用或表结构。

实战演练:自动发现并脱敏薪资字段

以下演示如何利用TSDP自动发现所有“薪资”字段并应用数据脱敏。

第一步:定义敏感类型
我们需要创建一个名为SALARY_TYPE的敏感类型,规则为:列名包含SAL且数据类型为NUMBER

BEGIN
  DBMS_TSDP_MANAGE.ADD_SENSITIVE_TYPE(
    sensitive_type  => 'SALARY_TYPE',
    user_comment    => 'Type for Salary Columns');

  -- 添加列名匹配规则
  DBMS_TSDP_MANAGE.ADD_SENSITIVE_TYPE_SOURCE(
    sensitive_type  => 'SALARY_TYPE',
    source_name     => 'COL_NAME_PATTERN',
    object_type     => 'COLUMN',
    search_pattern  => '%SAL%'); -- 列名包含 SAL

  -- 添加数据类型匹配规则
  DBMS_TSDP_MANAGE.ADD_SENSITIVE_TYPE_SOURCE(
    sensitive_type  => 'SALARY_TYPE',
    source_name     => 'DATA_TYPE',
    object_type     => 'COLUMN',
    search_pattern  => 'NUMBER'); -- 数据类型是 NUMBER
END;
/

第二步:定义保护策略
接下来,为SALARY_TYPE关联一个数据脱敏策略,将数值完全脱敏为0。这里需要与 Data Redaction 功能结合使用,这是Oracle数据库提供的一种实时数据脱敏方案。

BEGIN
  -- 1. 创建一个基础的数据脱敏策略模板(暂不启用)
  DBMS_REDACT.ADD_POLICY(
    policy_name     => 'redact_salary_policy',
    function_type   => DBMS_REDACT.FULL,
    expression      => '1=1', -- 对所有查询生效
    enable          => FALSE); -- 初始不启用,由TSDP控制

  -- 2. 在TSDP中创建策略并关联敏感类型
  DBMS_TSDP_PROTECT.ADD_POLICY(
    policy_name     => 'tsdp_salary_policy',
    sensitive_type  => 'SALARY_TYPE');

  -- 3. 为TSDP策略指定具体的保护函数(此处为完全脱敏)
  DBMS_TSDP_PROTECT.ASSOCIATE_POLICY(
    policy_name     => 'tsdp_salary_policy',
    sensitive_type  => 'SALARY_TYPE',
    associate       => TRUE,
    policy_function => 'DBMS_REDACT.FULL');
END;
/

注意:TSDP与Data Redaction的实际关联配置较为复杂,上述代码为逻辑示意,具体参数请参考官方文档中DBMS_TSDP_PROTECT包的使用说明。

第三步:执行自动发现
让TSDP在指定的模式(如HR)下扫描,寻找匹配SALARY_TYPE规则的列。

-- 扫描HR模式下的表
EXEC DBMS_TSDP_MANAGE.DISCOVER_SENSITIVE_DATA(schema_name => 'HR');

-- 查看发现结果
SELECT * FROM DBA_SENSITIVE_DATA;
-- 结果可能包含 HR.EMPLOYEES.SALARY, HR.JOBS.MIN_SALARY 等列

第四步:启用保护
确认发现结果无误后,一键启用对所有已发现列的保护。

BEGIN
  DBMS_TSDP_PROTECT.ENABLE_PROTECTION_SOURCE(
    sensitive_type => 'SALARY_TYPE'
  );
END;
/

执行完毕后,查询HR.EMPLOYEES表时,SALARY列的数据将根据策略被动态脱敏为0

进阶应用:与TDE及VPD集成

TSDP的架构优势在于其强大的兼容性。除了Data Redaction,它还能够与Oracle其他核心安全功能无缝集成,例如数据库透明加密(TDE)和虚拟私有数据库(VPD),从而构建纵深防御体系。

  1. TDE (透明数据加密):你可以定义策略,让TSDP自动为发现的敏感数据列启用列级加密(需12.2及以上版本),实现静态数据保护。
  2. VPD (虚拟私有数据库):可配置TSDP策略,为特定敏感数据表自动添加行级安全访问控制。

通过组合这些技术,可以实现分级的精准防护:

  • 对薪资数据应用Data Redaction,防止未授权用户查看明文。
  • 对信用卡号同时应用TDE列加密(防数据文件窃取)和Data Redaction(防直接查询查看),并可通过VPD控制行级访问权限。

总结与最佳实践建议

TSDP是Oracle数据安全自动化管理的重要工具,它将安全人员从繁琐的重复劳动中解放出来,使其能更专注于数据治理策略的制定。

实施建议:

  1. 规划先行:在部署TSDP前,应在组织内部明确数据分类分级标准(如公开、内部、机密、绝密),这是定义“敏感类型”的基础。
  2. 分步推进:初期可仅使用TSDP的DISCOVER_SENSITIVE_DATA功能进行全网扫描,生成一份详细的敏感数据资产清单和分布报告。这本身已是极具价值的安全审计成果,之后再逐步实施自动化保护策略。
  3. 结合场景:根据数据的不同敏感级别和访问场景,灵活组合使用脱敏、加密和访问控制等数据库安全功能,形成多层次、立体化的防护方案。

通过TSDP,企业能够实现安全策略与数据生命的同步,确保数据增长到哪里,安全防护就自动延伸到哪里。

参考资料

  • Oracle Database Security Guide - Using Transparent Sensitive Data Protection
  • PL/SQL Packages and Types Reference for DBMS_TSDP_MANAGE and DBMS_TSDP_PROTECT



上一篇:Go 1.22 Arena内存管理详解:获Rust级性能而无借用检查器之扰
下一篇:快手内容安全事件反思:AI审核漏洞与“老铁文化”的监管困局
您需要登录后才可以回帖 登录 | 立即注册

手机版|小黑屋|网站地图|云栈社区 ( 苏ICP备2022046150号-2 )

GMT+8, 2026-1-10 18:18 , Processed in 0.191469 second(s), 40 queries , Gzip On.

Powered by Discuz! X3.5

© 2025-2025 云栈社区.

快速回复 返回顶部 返回列表