3. 医疗数据分类与敏感数据识别

数据分类这事儿,说白了就是给你的数据资产贴标签。贴好了,后续的令牌化、脱敏、审计才能有的放矢。贴不好,那就是瞎忙活。

我个人习惯把医疗数据分类比作整理药房。你不能把所有药一股脑塞进一个柜子,对吧?急救药、处方药、OTC,每种都得有专属的位置和标识。数据也一样。

3.1 为什么要先做分类?

很多人一上来就问我:“我们先上令牌化工具行不行?” 我的回答通常是:不行。原因很简单,你连要保护的目标都没搞清楚,怎么设计和保护策略?

我在好几家三甲医院做过项目,发现一个普遍问题:大家都觉得自己的数据很敏感,结果把所有数据都按最高级别保护。存储成本飙升,查询效率直线下降,业务部门怨声载道。这就好比给整个药房都上指纹锁,喝水都得扫码,这不扯淡吗?

所以啊,分类是为了做减法。把真正核心的、敏感的数据找出来,给予最严的保护。其他的,用常规手段就行。这就是所谓的“精准防控”。

核心原则: 数据分类分级是数据安全治理的基石。没有分类,后续所有安全措施都是在盲打。

3.2 医疗数据应该怎么分?

说完了为什么,聊聊怎么分。这里没有放之四海而皆准的标准,但有几个维度可以参考。

我一般会从两个角度入手:数据属性和敏感性。先按属性分,再按敏感性定级。打个比方,先分清楚是“内科药”还是“外科药”,再决定是“麻醉药”还是“非处方药”。

按数据属性分类:

  • 患者身份信息: 姓名、身份证号、社保卡号、联系方式、家庭住址。你想想,这些信息要是丢了,直接就是精准诈骗。
  • 临床诊疗数据: 病历、医嘱、检验报告、影像数据、手术记录。这是医生的命根子,也是患者的隐私核心。
  • 医疗支付与保险数据: 医保卡号、支付记录、商业保险理赔信息。涉及经济利益,也是灰色地带常客。
  • 生物识别与基因数据: 指纹、虹膜、基因序列。这类数据是唯一且终身不可更改的,一旦泄露,就是一辈子的事。
  • 运营管理数据: 医院人力资源、财务、物资采购、内部OA。这部分敏感度相对较低,但涉及商业秘密。

按敏感性分级(以国家安全标准为蓝本):

级别 定义 典型示例
4级(极度敏感) 一旦泄露,会对个人生命健康、财产安全或国家安全造成极其严重的损害。 基因序列、人类遗传资源库、HIV/性病等重大传染病患者信息。
3级(高度敏感) 一旦泄露,会对个人声誉、财务状况或正常生活造成严重负面影响。 完整门诊病历、住院病历、身份证号、详细家庭地址、金融账户信息。
2级(中度敏感) 一旦泄露,会对个人或机构造成不利影响,但影响可控。 部分检验报告、非关键诊疗记录、联系电话(非手机)、电子邮箱。
1级(低敏感) 泄露后影响很小,基本不涉及隐私。 医院服务流程信息、科室排班、公开的医疗科普知识。

我的小技巧: 在做分类时,别光看数据本身,还要看数据的“上下文”。同样一个“血常规”报告,在门诊和在高管体检中,敏感度完全不同。

3.3 敏感数据识别的“三看”法则

分类搞定了,接下来就是敏感数据识别。说白了,就是把这些“重点药”从一堆药里挑出来。

我自己总结了“三看法”,实战中非常好用。

  1. 一看字段: 直接看数据库表的字段名。比如叫 patient_name、id_card_no 的,基本瞬间锁定。这是最粗糙,但也最直接的方法。
  2. 二看内容: 光看字段名不靠谱。很多系统的字段名叫 col_1、col_2,或者把身份证号藏在 remark 字段里。这时候需要用规则库去扫描实际内容。比如,用正则表达式匹配18位数字。
  3. 三看关系: 单个字段可能不敏感,但组合起来就是核弹。比如,姓名 + 科室 + 诊断结果。看内容只能识别个体,看关系才能识别场景。

一个简单示例(用正则识别身份证号):

-- 在SQL中,你可以这样查
SELECT column_name, COUNT(*) as total
FROM information_schema.columns
WHERE table_schema = 'his_db'
  AND table_name = 'patients';

-- 或者在应用层,用正则跑一遍
// Java伪代码
Pattern pattern = Pattern.compile("^[1-9]\\d{5}(18|19|20)\\d{2}(0[1-9]|1[0-2])(0[1-9]|[12]\\d|3[01])\\d{3}[\\dX]$");
Matcher matcher = pattern.matcher(data);

曾经踩过的坑: 我见过有人直接用名字去正则,觉得“张三”就是名字。拜托,一个叫“张三凤”的怎么办?还有“王五”呢。识别敏感数据不能只靠正则,必须结合字段元数据和业务逻辑,否则误报率能让你崩溃。

3.4 分类与识别的自动化工具

手动分类?那是小作坊干的事。稍微上点规模的医院,数据量都是PB级,人工搞不定的。必须上工具。

目前主流的自动化工具,一般包括这几个模块:

  • 元数据扫描器: 自动抓取所有数据库的表结构、字段注释。
  • 内容识别引擎: 内置海量敏感数据规则库(身份证、手机号、社保卡、基因序列模式等),能自动扫描全量数据。
  • 分类分级映射器: 根据识别结果,自动将数据表或字段映射到你预设的分类分级体系中。

我用过的一些工具环节对比:

工具/环节 优点 缺点
元数据扫描 速度快,不读业务数据,对库无影响 只能发现显性敏感字段,忽略隐性数据
内容识别引擎 精度高,能发现隐藏在字符串里的敏感信息 全量扫描时,对数据库IO和存储压力大,需在低峰期跑
机器学习分类器 能根据数据血缘和上下文去做分类,智能度最高 需要大量训练样本,且模型需要持续迭代

我个人倾向先用元数据扫描,快速圈定一批“候选人”,然后针对性跑内容识别。这样效率最高,又能保证召回率。

3.5 本章核心逻辑:分类 → 识别 → 打标

好了,把上面讲的串起来。整个流程其实就三步:先分好类,再识别出敏感数据,最后给数据打上标签。这个标签,就是后续令牌化的依据。

打个比方,分好类是准备好“药柜”,识别是找出“特殊药品”,打标就是给它们贴上“红处方”的标识。这样药剂师(令牌化引擎)一看就知道,哪些药需要单独放、特殊管。

下面这张图,你可以理解为整个数据安全预处理阶段的“主心骨”。

数据分类与敏感数据识别流程 原始数据资产 元数据扫描 内容识别引擎 数据属性分类 + 敏感性定级 患者信息 / 临床数据 / 支付数据 / 基因数据 敏感数据打标 (Tokenization Tag) 令牌化策略执行 避坑 切勿跳过分类直接打标

记住,分类识别这事,永远没有一劳永逸。数据在变,业务在变,法规也在变。你得定期去复盘、去更新你的分类分级结果。我以前的习惯是,每个季度拉一次全量扫描,每个月做一次增量变更识别。只有这样,你的令牌化策略才不会是空中楼阁。嗯,今天就到这儿。