概述
大多数公司知道结构化 PII 在哪里:users.email、customers.phone。真正的缺口是自由文本、客服备注、JSON 字段以及隐私评审之前留下的历史列。扫描把这些未知变成可复核的清单,为删除任务、访问控制和数据主体请求提供输入。
步骤
- 安装 Presidio 并确认模型可用:
pip install presidio-analyzer psycopg[binary]
python -c 'from presidio_analyzer import AnalyzerEngine; print(AnalyzerEngine().analyze(text="[email protected]", language="en"))'
- 在只读副本上抽样候选文本列,使用 0.6 以上的置信度阈值:
for result in analyzer.analyze(text=str(text), language="en"):
if result.score >= 0.6:
hits.append((row_id, result.entity_type, round(result.score, 2)))
- 按列和实体类型汇总,生成包含命中数和分类建议的
pii-inventory.csv。 - 将结论写入列注释,例如
COMMENT ON COLUMN support_tickets.notes IS 'PII: ...',让下游任务可以发现分类。
验证
预期清单中能识别出邮箱、电话、人名等实体,并标明所在列;抽查 20 条命中记录,确认误报比例可接受。列注释应出现在 information_schema 和数据目录同步结果中。
注意事项
- 检测是概率性的,低置信度命中仍可能是个人数据,匿名化后的值也可能匹配模式。
- 抽样可能漏掉稀有列,二进制与加密字段不在分析范围内。
- 使用 TABLESAMPLE 与 LIMIT 控制扫描成本,绝不在主库上全表扫描。
- 报告只保留计数与实体类型,不要把原始敏感值写入 CSV 或日志。