在传统的数据安全管理中,数据库管理员(DBA)或安全人员常常依赖手工记录和维护来管理敏感数据字段。这种方式不仅效率低下,在面对海量表和频繁的系统变更时,还极易出现遗漏,为数据安全埋下隐患。
Oracle Database 12c 引入的 TSDP(透明敏感数据保护) 功能,旨在从根本上解决这一难题。它提供了一个强大的自动化框架,能够对数据库中的敏感数据进行自动识别和批量保护,极大地提升了数据安全管理的效率和准确性。
核心概念:TSDP是什么?
TSDP 本身并非一种独立的加密或脱敏技术,而是一个集中式的策略管理与自动化执行框架。它将敏感数据的“定义”与“保护”两个环节解耦。
你可以将其理解为一个策略管理中心:
- 敏感类型:定义“什么是敏感数据”,即设定识别规则。例如:所有列名包含
CARD_NO且数据类型为VARCHAR2的字段,都定义为“信用卡号”类型。
- 保护策略:定义“如何保护这类数据”,即指定保护手段。例如:为“信用卡号”类型统一应用数据脱敏策略。
一旦完成策略配置,TSDP即可自动扫描全库,将匹配的列识别出来并统一实施预定义的保护措施。

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),从而构建纵深防御体系。
- TDE (透明数据加密):你可以定义策略,让TSDP自动为发现的敏感数据列启用列级加密(需12.2及以上版本),实现静态数据保护。
- VPD (虚拟私有数据库):可配置TSDP策略,为特定敏感数据表自动添加行级安全访问控制。
通过组合这些技术,可以实现分级的精准防护:
- 对薪资数据应用Data Redaction,防止未授权用户查看明文。
- 对信用卡号同时应用TDE列加密(防数据文件窃取)和Data Redaction(防直接查询查看),并可通过VPD控制行级访问权限。
总结与最佳实践建议
TSDP是Oracle数据安全自动化管理的重要工具,它将安全人员从繁琐的重复劳动中解放出来,使其能更专注于数据治理策略的制定。
实施建议:
- 规划先行:在部署TSDP前,应在组织内部明确数据分类分级标准(如公开、内部、机密、绝密),这是定义“敏感类型”的基础。
- 分步推进:初期可仅使用TSDP的
DISCOVER_SENSITIVE_DATA功能进行全网扫描,生成一份详细的敏感数据资产清单和分布报告。这本身已是极具价值的安全审计成果,之后再逐步实施自动化保护策略。
- 结合场景:根据数据的不同敏感级别和访问场景,灵活组合使用脱敏、加密和访问控制等数据库安全功能,形成多层次、立体化的防护方案。
通过TSDP,企业能够实现安全策略与数据生命的同步,确保数据增长到哪里,安全防护就自动延伸到哪里。
参考资料
- Oracle Database Security Guide - Using Transparent Sensitive Data Protection
- PL/SQL Packages and Types Reference for DBMS_TSDP_MANAGE and DBMS_TSDP_PROTECT