数据脱敏常用方法有哪些

安全与风控

给数据开发人员的脱敏方法速查:按字段类型挑做法,含选型对照、落地步骤与不适用情形,避开只脱一半的坑。

做数据同步、导测试库、接日志的时候,最容易被问一句「这块脱敏了吗、用的什么方法」。方法名字听得多,真到挑的时候又不知道哪个配哪个字段:手机号可以截断,地址截断就废了,编号类还得保证关联性。这篇按数据类型把常用方法摆开,给一张选型对照和上线前的检查顺序,顺手说清什么场景不该用哪种。

做数据同步、导测试库、接日志的时候,最常被追问一句「这块脱敏了吗、用的什么方法」。方法名字听着都熟,真到挑的时候又不知道哪个配哪个字段:手机号可以截断,地址截断基本就废了,编号类还得保证关联性。脱敏不是给数据整容,是让拿到数据的人用得上、又推不回原人。

这篇按数据类型把常用方法摊开讲,给一张选型对照,再给一串上线前的检查顺序,顺手说清什么场景不该用哪种。方法本身没有高下,只有配不配。选之前先问一句:这份数据脱敏之后给谁用、拿来干什么。

先按方法分类,别按工具分类

同一类方法在不同工具里叫法不一样,直接按工具名记会乱。建议先归到四类里,再谈选型:遮蔽替换、变形乱序、泛化截断、生成替代。每类只解决一个方向的问题,认清方向比记住工具名有用。

遮蔽替换
掩码、假名化,保格式不保原值;可逆与否取决于映射表放哪
变形乱序
置乱、混淆,打乱顺序或加噪声,适合统计口径、不适合逐行还原
泛化截断
分组、取整、截位,把颗粒度放大,牺牲精度换重识别难度
生成替代
用合成值顶替原值,格式可控,但关联关系要自己保证

字段类型对照表:什么字段配什么做法

下面这张表按字段性质分组。注意「保留什么」那一列:脱敏最怕的不是脱不干净,而是把下游依赖的东西一起脱掉了,格式一变,校验、索引、外键全炸。

字段性质常见字段推荐做法要保住什么
标识直连类手机号、证件号、卡号掩码保留前后少量位,或生成同格式假值长度、类型、校验位规则
准标识类地址、生日、邮编、部门泛化到上一级颗粒度层级关系与分组口径
自由文本备注、日志、聊天记录先字段级结构化再脱敏字段边界,别靠正则硬扫
关联分析类用户 ID、订单号、设备号确定性假名映射或格式保持替换跨表跨列的一致性
  • 手机号、证件号这类:掩码只留前后少量位,重点是不改变长度和类型,否则下游校验必炸
  • 地址、生日、邮编:泛化到上一级颗粒度,比逐个打码更实用,也更能挡住重识别
  • 自由文本与日志:别指望正则一把梭,先做字段级结构化再谈脱敏,顺序反了一定漏
  • 需要保持关联的分析场景:用确定性假名映射或格式保持的替换,别用随机值,否则同一个实体在两列里对不上

日志这条线单独拎出来说,因为它的暴露面通常比数据库大。日志脱敏的口径和留存策略可以顺着 /log-redaction-retention 的整理思路走一遍,把打印、落盘、采集三段分开看。

落地步骤与检查顺序

脱敏不是写个函数就完事,它是一条链路上多个环节的约束。下面这个顺序别乱,先盘清楚再定规则,规则落到配置里而不是散在代码各处。

  1. 盘字段清单列出数据源、流向、落哪些库哪些日志,用 /data-boundary-audit 的思路把整条链路走一遍再动手,漏一个出口就等于没脱
  2. 定规则表字段、方法、是否可逆、保留位数、异常值怎么处理,全部落成配置。这样换字段、加字段时不用改代码,也方便审计
  3. 抽样验证脱敏后跑一次唯一性、空值率、格式校验和关联校验,重点看有没有因为取整或映射把两条记录并成一条
  4. 上线前对照按最小必要原则过一遍 /prelaunch-security-checklist,确认权限、日志、导出三条路都没漏

验证环节最容易省,也最容易出事。至少抽三类数据:边界值、空值、长得像但实际不同的记录。跑完比对脱敏前后的行数、唯一值数量,对不上就说明映射规则有问题。

哪些情况不适合用这些方法

方法有用,但不是万能。下面这些情形要么换思路,要么干脆别提供明细数据——硬上脱敏只是给自己一个「做过了」的错觉。

  • 高维或长尾稀疏字段做泛化后几乎等于全匿名,报表维度会塌掉,要么换聚合口径,要么别对外提供明细
  • 小样本数据集里,掩码和泛化仍可能被交叉比对重识别,脱敏不等于不可识别
  • 强关联业务(对账、风控回溯)用不可逆方法会导致后续无法追溯,这类字段优先考虑加密加权限管控,而不是直接打掉
  • 脱敏是降低风险不是消除风险,方法选完还要看留存期限、访问权限和导出控制,三者缺一都不算做完

还有一类常被忽略:把脱敏当成一次性项目。数据源在变、下游在用、合规口径在调,规则表要有人维护。如果团队里没人对这张表负责,过一阵就会冒出绕过脱敏直连原库的临时脚本。

常见问题

脱敏和加密到底该用哪个?

看用途:脱敏是为了让数据能被人看、被程序跑但看不出原值,加密是为了存得安全、需要时能还原。要还原的字段用加密,不需要还原的字段用脱敏;两者常一起用,存储加密、展示脱敏。区别的细节站内有专门一篇对照讲,别混在一套规则里。

静态脱敏和动态脱敏怎么选?

静态是脱完再落库,适合导测试数据、做数据集分发;动态是在查询时按权限实时改写,适合生产库给不同角色看不同结果。有合规时限要求、需要留存原值的用动态,只发出去给别人用的用静态。两边规则最好同一份配置,否则迟早对不上。

脱敏之后数据还是被识别出来了,问题出在哪?

多数是漏了准标识字段的组合,或者保留了过多可关联的维度。排查顺序:先看有没有没进清单的字段,再看颗粒度是不是太细,最后看是否同时开放了导出和明细查询。脱敏只能降低概率,配合访问控制和留存限制才有效。

本文依据各平台公开文档与官方公告整理,只做中文归纳;具体做法、参数与限制以官方文档为准。