数据脱敏
问题
什么是数据脱敏?静态脱敏和动态脱敏有什么区别?
答案
脱敏方式对比
| 维度 | 静态脱敏 | 动态脱敏 |
|---|---|---|
| 时机 | 数据导出/同步时 | 查询返回时 |
| 效果 | 生成脱敏后的副本 | 原始数据不变,展示脱敏 |
| 适用 | 测试环境、数据共享 | 生产环境查询 |
| 性能 | 一次性处理 | 每次查询处理 |
常见脱敏规则
| 数据类型 | 脱敏规则 | 原始值 | 脱敏后 |
|---|---|---|---|
| 手机号 | 保留前3后4 | 13812345678 | 138****5678 |
| 身份证 | 保留前6后4 | 110105199001012345 | 110105****2345 |
| 邮箱 | 保留首字符@域名 | alice@gmail.com | a***@gmail.com |
| 姓名 | 保留姓 | 张三 | 张* |
| 银行卡 | 保留后4位 | 6222021234567890 | ************7890 |
| 地址 | 保留到市级 | 北京市朝阳区xx路xx号 | 北京市朝阳区*** |
-- SQL 脱敏函数示例
SELECT
user_id,
-- 手机号脱敏
CONCAT(LEFT(phone, 3), '****', RIGHT(phone, 4)) AS phone_masked,
-- 邮箱脱敏
CONCAT(LEFT(email, 1), '***@', SUBSTRING_INDEX(email, '@', -1)) AS email_masked,
-- 姓名脱敏
CONCAT(LEFT(name, 1), REPEAT('*', CHAR_LENGTH(name) - 1)) AS name_masked
FROM users;
脱敏策略
| 策略 | 说明 | 适用场景 |
|---|---|---|
| 遮盖 | 用 * 替换部分字符 | 手机号、身份证 |
| 哈希 | SHA256 单向加密 | 用户 ID 关联 |
| 泛化 | 降低精度 | 年龄段、区域 |
| 置换 | 用假数据替换 | 测试环境 |
| 加噪 | 添加随机噪声 | 统计分析 |
数据分析场景的脱敏建议
- 分析用数据:使用哈希后的 user_id(可关联但不可逆)
- 对外报告:聚合数据,确保无法反推个人
- 测试环境:静态脱敏生成虚假数据
- BI 看板:动态脱敏,不同角色看到不同粒度
常见面试问题
Q1: 哈希脱敏安全吗?
答案:
- 简单哈希(如 MD5)对于手机号等有限值域的数据不够安全(可暴力破解)
- 应使用加盐哈希(HMAC-SHA256),且盐值需保密
- 哈希适合关联分析(同一 user 在不同表中 hash 值一致),不适合需要还原的场景
Q2: K-匿名是什么?
答案: K-匿名要求数据中每条记录的准标识符(如年龄、邮编、性别)至少与 K-1 条其他记录相同,使得攻击者无法在 K 条记录中区分特定个人。常用于发布统计数据时的隐私保护。
相关链接
- GDPR 与隐私法规 - 法规要求
- PII 处理 - PII 识别与处理
- 数据库安全 - 数据加密