出库前保护用户资料

数据脱敏实战示例集合

目标:在数据导出前进行脱敏处理,保护用户隐私信息。

该页面展示:左侧为原始CSV测试数据,右侧为脱敏规则JSON,下方为脱敏结果。

工作流程:上传CSV → 配置脱敏规则 → 预览脱敏效果 → 安全导出

示例 1: 基础个人信息脱敏

📊 原始CSV数据

name phone email id_number
张三 13812345678 user@example.com 110101199003071234

⚙️ 脱敏规则 (rules.json)

{
  "rules": [
    {
      "type": "mask",
      "preset": "name",
      "field": "name",
      "keepFirst": 1,
      "maskChar": "*"
    },
    {
      "type": "mask",
      "preset": "phone",
      "field": "phone",
      "keepFirst": 3,
      "keepLast": 4
    },
    {
      "type": "mask",
      "preset": "email",
      "field": "email",
      "mode": "regex",
      "params": {
        "pattern": "^(.{1,3}).*(@.+)$",
        "replace": "$1***$2"
      }
    },
    {
      "type": "mask",
      "preset": "id",
      "field": "id_number",
      "keepFirst": 6,
      "keepLast": 4
    }
  ]
}

✓ 脱敏结果

字段 原始值 脱敏后 保护规则
name 张三 张* 保留首字,其余用 * 替换
phone 13812345678 138****5678 保留前3位和后4位,中间 ****
email user@example.com u***@example.com 保留首字和@以后,中间 ***
id_number 110101199003071234 110101********1234 保留前6位和后4位(身份证标准脱敏)
示例 2: 邮箱脱敏方式对比

📊 原始数据

email
alice@company.com
bob.smith@gmail.com
contact@example.co.uk

⚙️ 两种脱敏规则

方式A: 默认(仅保留首字)

{
  "type": "mask",
  "preset": "email",
  "field": "email"
}

方式B: 正则模式(保留前3字)

{
  "type": "mask",
  "preset": "email",
  "field": "email",
  "mode": "regex",
  "params": {
    "pattern": "^(.{1,3}).*(@.+)$",
    "replace": "$1***$2"
  }
}

✓ 脱敏结果对比

原始邮箱 方式A: 默认 方式B: 正则 选择建议
alice@company.com a***@company.com a***@company.com 用户名短,两种结果相同
bob.smith@gmail.com b***@gmail.com b***@gmail.com 点号被计入正则前3字
contact@example.co.uk c***@example.co.uk c***@example.co.uk 无论域名复杂度,脱敏一致

💡 提示:对于大多数场景,默认方式(仅保留首字)已足够安全。
若需保留更多信息用于识别,可使用正则模式并根据需求调整 pattern。

示例 3: 金融数据脱敏

📊 原始数据

account_holder bank_card account_opening_date
王小明 6227003912345678 2020-05-15

⚙️ 脱敏规则

{
  "rules": [
    {
      "type": "mask",
      "preset": "name",
      "field": "account_holder",
      "keepFirst": 1,
      "maskChar": "*"
    },
    {
      "type": "mask",
      "preset": "bank",
      "field": "bank_card",
      "keepFirst": 4,
      "keepLast": 4
    }
  ]
}

✓ 脱敏结果

字段 原始值 脱敏后 用途
account_holder 王小明 王** 识别账户,隐藏全名
bank_card 6227003912345678 6227********5678 验证卡号尾号(银行标准实践)
account_opening_date 2020-05-15 2020-05-15 开户日期保留(不涉及隐私)
示例 4: 地址信息隐私保护

📊 原始数据

address
北京市朝阳区建国路123号金融街中心1205室

⚙️ 脱敏规则

{
  "type": "mask",
  "preset": "address",
  "field": "address",
  "keepFirst": 5,
  "keepLast": 3,
  "level": "city",
  "maskChar": "*"
}

参数说明:
• level: "city" - 保留到城市级别
• keepFirst/keepLast - 额外保留的字符数
• 结果:北京市朝阳区 (街道及以下信息被隐藏)

✓ 脱敏结果

原始地址 脱敏后(city级别) 保护效果
北京市朝阳区建国路123号金融街中心1205室 北京市朝阳区 隐藏具体楼号和房间号,保留城市信息
📚 最佳实践总结

✓ 推荐做法

  • ✅ 对敏感字段(密码、PIN)不导出,不脱敏
  • ✅ 对身份证、电话、邮箱等按字段类型选择预设
  • ✅ 保留足够信息供业务方识别(如电话后4位)
  • ✅ 对地址逐级降级,根据具体需求调整level
  • ✅ 在导出流程中自动应用,避免人工操作

✗ 避免做法

  • ❌ 完全删除信息,导致无法识别
  • ❌ 规则过弱(如仅隐藏一个字符)
  • ❌ 混淆字段mapping,导致脱敏错位
  • ❌ 导出明文备份数据
  • ❌ 脱敏规则硬编码,难以维护

需要更复杂的脱敏场景?查看 脱敏规则完整参考