2. 字段级脱敏核心概念

做数据脱敏,我见过不少团队一上来就买工具、定策略,结果跑了两周就卡住了。卡在哪?就是核心概念没理清。你想想看,连哪些数据是敏感的、要脱到什么颗粒度、用哪种方法脱,都没想明白,怎么可能落地呢?

这一章,咱们就把这三个根基打牢:敏感字段怎么识别、脱敏粒度怎么选、脱敏策略怎么定。搞懂了这些,后面写规则、调性能,你心里就有谱了。


2.1 敏感字段识别

敏感字段识别是个老话题,但我发现很多人还在用最笨的办法——找业务部门要字段列表。结果呢?业务给了两百多个字段,里面一半不敏感,真敏感的反倒漏了。

敏感字段的典型特征其实很简单:

  • 个人身份:能直接定位到具体人的,比如身份证号、手机号、微信号。
  • 财务财产:银行卡号、交易金额、账户余额。
  • 行为偏好:位置轨迹、购物记录、搜索历史。
  • 系统安全:密码、密钥、、Session ID。

那怎么识别呢?我一般用三种手段结合:

  1. 正则匹配:身份证号、手机号这类有固定格式的,写几条正则快速扫描。
  2. 字典匹配:字段名里带 "passwd"、"card"、"ssn" 的,直接命中。
  3. 机器学习分类:实在拿不准的,用训练好的模型对字段内容做分类。

我曾在项目中遇到过这样一个坑:业务方信誓旦旦说某个系统没有敏感数据,结果我们用正则一扫,发现一个备注字段里藏着大段身份证号字符串。这种就属于非结构化敏感数据,最难识别,也最容易出事。

我的习惯做法:先做一轮自动化扫描,列出所有疑似敏感字段;再拉着业务、法务、安全三方各过一遍,打标签;最后抽查5%-10%的样本数据做人工校核。三轮下来,基本不会漏。

2.2 脱敏粒度

脱敏粒度这个问题,我刚开始做的时候也纠结过。说白了,就是你要管到哪个级别。

粒度 作用范围 优点 缺点
行级 整行不可见 实现简单,性能好 太过粗暴,丢失大量上下文
列级 整列脱敏 粒度比行级细 一列只有一个策略,不够灵活
字段级 单个字段值 最灵活,可按需配置 规则复杂,性能开销大

举个例子你就明白了。假设一张用户表,有姓名、手机号、余额三列。

  • 行级脱敏:普通运维直接看不到某行记录,连姓名都看不到。
  • 列级脱敏:手机号整列全部打码,但姓名和余额还是明的。
  • 字段级脱敏:同一个手机号,财务看到完整版,客服看到尾号四位——这就牛了。

我个人偏好字段级脱敏。为什么?因为你想想看,一个客服和一个审计员,他们对同一笔交易的数据可见权限应该是不同的。字段级能精准控制,不会一刀切。

我曾经踩过的坑:在性能敏感的系统里,对全表做字段级脱敏,结果查询延时从50ms飙到2秒。后来加了缓存和预计算结果才压下来。所以字段级虽好,但别贪多——只对真正需要细粒度控制的字段用字段级,其他的扔给列级就够了。

2.3 脱敏策略

策略选不对,脱敏等于没做。常见的脱敏策略有这些:

  1. 掩盖:像 "138****5678" 这样,部分展示。
  2. 替换:用假名/假数据替换真实数据,常用于测试库。
  3. 加密:数据保持密文,使用时解密。
  4. 截断:只取前几位或后几位,扔掉其他。
  5. 令牌化:用无意义替换真实值,映射表单独存储。

选哪种策略,要看你的业务场景。我给你画个对比表:

策略 适用场景 可逆性 数据失真度
掩盖 报表展示、客服查询 不可逆 中
替换 测试环境、培训环境 不可逆 高
加密 传输、存储全链路保护 可逆 无
截断 日志审计、统计计算 不可逆 高
令牌化 支付、跨系统数据共享 可逆(有映射表) 无

你可能会问,那加密和令牌化有什么区别?我习惯这么讲:加密是算法可逆,密钥丢了就全完了;令牌化是映射可逆,映射表没了你也还原不了,但一张表被攻击和一套算法被破解,风险等级完全不同。

// 一个字段级掩盖策略的例子
// 手机号:保留前3位和后4位,中间用*代替
function maskPhone(phone) {
  return phone.replace(/(\d{3})\d{4}(\d{4})/, '$1****$2');
}

实际落地时,我建议不要只选一种策略。你可以根据字段角色组合使用:

  • 公共展示场景:掩盖
  • 数据加工场景:替换
  • 存储传输场景:加密 / 令牌化

核心要点:

  • 敏感字段识别靠正则+字典+人工校核,三重保险
  • 脱敏粒度按需选择,字段级最灵活但也最耗性能
  • 脱敏策略要根据场景定,别拿一个策略打天下
字段级脱敏核心概念结构 字段级脱敏核心概念 敏感字段识别 身份/财务/行为/系统 方法:正则 + 字典 + ML 人工校核做兜底 脱敏粒度 行级 / 列级 / 字段级 字段级最灵活,性能是短板 按需选择,别一刀切 脱敏策略 掩盖 / 替换 / 加密 截断 / 令牌化 策略要跟场景走 三者关系 识别出敏感字段 → 确定脱敏粒度 → 选择脱敏策略 可配置的动态脱敏规则

最后我想说,这三个概念不是孤立的。识别、粒度、策略,三者要放到一起考虑。你识别出了一个敏感字段,决定了要用字段级粒度,然后选了掩盖策略——这样一条完整的规则才真正能用起来。