PII 处理
问题
什么是 PII?数据分析中如何正确处理 PII?
答案
PII 定义
PII(Personally Identifiable Information)是指能够直接或间接识别特定个人的信息。
| 类型 | 示例 |
|---|---|
| 直接标识符 | 姓名、身份证号、手机号、邮箱 |
| 间接标识符 | IP 地址、设备 ID、Cookie ID |
| 敏感 PII | 银行卡号、密码、医疗记录、生物识别 |
| 准标识符 | 年龄 + 性别 + 邮编(组合可能识别个人) |
PII 处理流程
PII 扫描
import re
# 简单的 PII 扫描规则
PII_PATTERNS = {
'手机号': re.compile(r'1[3-9]\d{9}'),
'身份证': re.compile(r'\d{17}[\dXx]'),
'邮箱': re.compile(r'[\w.+-]+@[\w-]+\.[\w.]+'),
'银行卡': re.compile(r'\d{16,19}'),
'IP地址': re.compile(r'\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}'),
}
def scan_pii(text: str) -> dict:
"""扫描文本中的 PII"""
results = {}
for pii_type, pattern in PII_PATTERNS.items():
matches = pattern.findall(text)
if matches:
results[pii_type] = matches
return results
# 扫描 SQL 查询结果中的 PII
sample_data = "用户张三,手机 13812345678,邮箱 alice@gmail.com"
print(scan_pii(sample_data))
# {'手机号': ['13812345678'], '邮箱': ['alice@gmail.com']}
数据分析中的 PII 处理建议
| 场景 | 处理方式 |
|---|---|
| 用户行为分析 | 使用哈希后的 user_id |
| 导出报告 | 聚合数据,不含个人信息 |
| A/B 测试 | 使用匿名标识符分桶 |
| 数据建模 | 特征工程时去除 PII 列 |
| 共享给第三方 | 静态脱敏 + 审批 |
| BI 看板 | 动态脱敏,角色控制 |
红线行为
- ❌ 将含 PII 的数据导出到个人电脑
- ❌ 在群聊/文档中共享含 PII 的截图
- ❌ 使用真实 PII 作为测试数据
- ❌ 未脱敏就将数据共享给外部
常见面试问题
Q1: 如何判断一个字段是否是 PII?
答案: 判断标准:该字段单独或与其他字段组合后能否识别到特定个人。
- 手机号 → 直接识别 → PII
- 年龄 → 单独不可识别 → 非 PII
- 年龄 + 邮编 + 性别 → 组合可能识别 → 准标识符
Q2: 如何建立 PII 合规检查机制?
答案:
- 数据目录标注:在元数据中标记 PII 字段
- 自动扫描:定期扫描数据仓库中的 PII
- 审批流程:访问 PII 数据需走审批
- SQL 审计:记录包含 PII 字段的查询
- 培训教育:定期对数据使用者进行合规培训
相关链接
- 数据脱敏 - 脱敏技术详解
- GDPR 与隐私法规 - 法规要求
- 权限管理 - 数据访问控制