posts

一个人的隐私工程:数据地图、最小化与删除权(10 篇)

一个人处理用户数据,最难的不是写隐私政策,而是说清每个字段从哪来、存多久、给谁。本组从 344 个账号、12 张表与 78 个字段出发:数据地图、最小化、合法性依据、政策一致性、数据主体请求、删除、保留期、跨境、泄露响应,最后用十二项检查验收。

隐私不是一份政策文档,是每个字段从进来到消失的整条路径。

这个系列解决什么问题

一个人做产品,数据是顺手收进来的:注册表单多一个字段、埋点多一个属性、日志多打一行、模型调用多带一段上下文。收的时候没有成本,删的时候才发现要改 9 张表、5 个外部接口和 2 个保留期。

这个系列把「数据怎么进来、怎么用、怎么出去」拆成十篇:先画一张能回答安全问卷的数据地图,再把没人读的字段删掉;然后处理四类目的与三类同意,核对政策与产品行为是否一致;接着处理三类数据主体请求、删除的级联与保留期;最后处理跨境、供应商与泄露响应,用十二项检查做季度验收。

它服务的是一个没有法务、没有安全团队、每月只能拿出三小时的人。 你能投入的不是一套合规体系,而是一张字段表、四个清理任务和一次两小时的演练。

核心主张:五条口径

10 篇速览

#文章核心内容阶段
01数据地图:十二张表、七十八个字段与一次「我们到底收了什么」12 张表、78 个字段、12 个域名与六属性登记盘点
02数据最小化:二十三个没人读的字段与一次删列迁移23 个零读取字段、目的矩阵、删列三步减法
03合法性依据与同意:四类目的、三种同意与一次版本错配4 类目的、3 类同意、38 条错配记录依据
04隐私政策与产品行为:十二个域名、九个披露与三个漏项12 个域名、9 个披露、季度 30 分钟核对一致
05数据主体请求:一年十二件、三十天与一套导出脚本12 件/年、30 天 SLA、4.45 MB 导出包响应
06删除权:九张表、九十七行与两个等保留期的副本9 张表、97 行、60 天副本消失删除
07保留期:六类数据、四个清理任务与一次没跑的备份清理6 类保留期、4 个任务、10.8 GB 漏删保留
08跨境与供应商:七个处理者、四十二个欧盟用户与一份传输评估7 个处理者、42 个 EU 用户、7 份 TIA出境
09数据泄露:七十二小时、三级分级与一次两小时演练3 级分级、72 小时、8 小时/年演练泄露
10隐私验收:十二项检查、四维评分与一次季度演练12 项检查、四维加权、3.80 与季度排期验收

三条阅读路径

路径 A:产品刚上线,还没人问过数据。 先读 01 把 12 张表与 78 个字段列出来,再读 02 删掉 23 个零读取字段,最后用 10 的十二项检查做一次基线评分。这条路径的重点是「先知道有什么,再决定留什么」。

路径 B:收到第一封数据请求或客户 DPA。 先读 05 把 30 天流程与导出脚本跑通,再读 06 把删除级联与副本期限写清,用 04 核对政策与实际域名是否一致。这条路径的重点是「能在一周内交出一个可复查的答复」。

路径 C:要出海或接企业客户。 先读 08 把 7 个处理者、区域与传输评估列成表,再读 09 做一次泄露演练,最后用 10 的评分表排出季度预算。这条路径的重点是「把跨境与泄露从口头承诺变成可演练的流程」。

与其它专题的边界

站内已有合规、平台、资产、度量、运维与多租户内容,但都不处理「个人数据从收集到删除的整条生命周期」。下表说明本组不重复什么。

既有内容它讲什么本组边界
一个人的公司:主体、税务与合规主体、税种、合同、隐私政策与 DPA 的文档字段它写「承诺什么」;本组核对「实际做了什么」,并管字段、请求与删除
独立开发者的平台寄生上架审核、平台合规与隐私政策要求它满足渠道规则;本组管产品自己的数据生命周期
独立开发者的资产韧性备份、恢复、云账号与事故交接它保证数据找得回;本组保证数据该删时删得掉
一个人的产品度量:事件字典与指标口径24 个事件、埋点校验与九十天保留它定义事件;本组判断事件里哪些字段不该收
一个人的运维:可用性、告警与事故五分钟止损、状态页与七天复盘它管服务活着;本组管事故里涉及个人数据时怎么报
一个人的多租户:组织、角色与数据隔离角色矩阵、三层校验与审计日志它防越权;本组防超范围收集与超期保留
一个人的消息系统:事务邮件与送达率同意、退订与偏好中心它管发不发;本组管同意记录与撤回后的数据
一个人把 API 做成产品:对外接口与开发者体验key、配额、Webhook 与日志它管接口凭据;本组管接口日志里不该留的字段
一个人的架构:技术选型、模块边界与演进34 张表、迁移与外部服务适配它管表结构与迁移;本组管表里哪些字段是个人信息
一个人的计费系统:订阅状态机与对账账单、发票、退款与 7 年单据它管钱;本组管钱之外的个人数据与法定保留例外
一个人的自助支持:帮助中心与工单工单分级、排查树与模板答复它管答复;本组管工单里贴进来的用户数据
一个人的前 100 天:从想法到第一批付费用户验证、手工交付与首次收费它管第一批用户;本组管第一批用户的数据从第一天就收对
一个人的数据搬家:导入、去重、迁移与退出(10 篇)迁移漏斗、导入契约、字段映射、去重合并、幂等重跑、人工代导入、窗口与回滚、附件限额、导出退出、十项验收那组讲导入数据的边界与导出包;本组讲数据地图、最小化与删除权
一个人的质量守门:验证预算、回归清单与发布门禁(10 篇)47 缺陷与三条红线、12 条关键路径、三层配比、38→26 回归、六项门禁、四级缺陷、测试数据、不可逆保护、测试债、十项验收那组讲删除操作的不可逆保护;本组讲数据地图、最小化与删除权
一个人的安全基线:十四个入口、十七个密钥与一次 72 小时响应14 个攻击面、认证与枚举、会话撤销、17 个密钥三档、四条边界、41 个依赖与 186 条告警、四类限流、9 类审计日志、72 小时三段响应、20 项验收那组管「收进来的东西怎么不被拿走」;本组管「该不该收、要留多久」
一个人的性能与账单:4.2 秒的首屏、一千二百次查询与每月 210 美元4 项预算与 20 格、RUM 与慢查询、412→168 KB、1,200→3 次查询、0→86% 缓存、34 秒导出、7→4 个第三方、210→118 美元、3 次回归告警、10 项验收那组讲指标与日志里存什么、留多久;本组讲该不该收、要留多久
一个人的企业客户:九家询价、一百四十八道问卷与 134 天的第一单9 家询价与 130 h、96 天采购、148 题问卷、7 个子处理者、SLA 43.2/216 分钟、26 h SSO、4 周试点、38 天到账、8 h 实施、10 项验收那组讲 DPA 条款与子处理者;本组讲数据地图、最小化与删除权
一个人的开源产品:4,200 个 star、一百八十个付费与一年 612 小时的维护4,200 star 与 1,949 美元、612 h 维护、214 依赖、48,600 行 78/22、1,180 个 issue、214 条告警、23 个赞助者、9 家双许可、17 位贡献者、10 项验收那组讲开源项目的边界与披露;本组讲数据地图、最小化与删除权

这十篇不承诺「照做就不会违规」,也不提供可直接使用的法律文本。可复算的部分全部用四则运算给出算式;不可复算的部分(法域、监管判断、供应商能力)明确指向官方文档。所有数字都是教学假设,代入前请换成自己的表、字段与请求量。

本组统一口径

全组共用一组教学假设,各篇引用时不换分母:

产品:一人 SaaS,与既有组同一产品;账号 344(付费 120 + 试用 18 + 暂停 2 + 免费/沉默 204)
数据库:34 张表;含个人信息的表 12 张、字段 78 个;平均 6.5 个/表
字段分类:身份 18 + 内容 24 + 行为 22 + 财务 14 = 78
零读取字段:23 个(6 个月日志证明)→ 78 − 23 = 55,删除比例 29.5%
处理目的:4 类(服务、计费、分析、营销);字段×目的矩阵 78×4 = 312 格,允许 96 格 = 30.8%
同意:3 类(条款、营销、分析);营销订阅 268 人 = 77.9%,未订阅 76 人 = 22.1%;年撤回 24 人 = 7.0%
数据流向:12 个域名 = 5 个自有 + 7 个外部服务(支付、邮件、对象存储、模型、分析、搜索、鉴权)
政策披露:9/12 → 3 个漏项(分析、模型、错误监控)= 25%;修复后 12/12
数据主体请求:12 件/年 = 访问 5 + 导出 4 + 删除 3;手工 2.5 h/件、脚本 0.5 h/件
导出包:主数据 97 行(58 KB)+ 文件 18 个(4.32 MB)+ 90 天事件 113 条(68 KB)≈ 4.45 MB
删除:9 张表级联 97 行;18 个文件;452 事件/账号/年;年删除 36 个账号 = 10.5%
删除副本:软删 30 天 + 备份 30 天 = 60 天;发票 7 年法定保留、只匿名化
保留期:账号主数据 30 天、应用日志 90 天、分析明细 90 天、备份 30 天、审计 90 天–36 个月、发票 7 年
清理任务:4 个 × 每日 = 120 次/月;失败 0.8% = 0.96 次/月
备份:0.9 GB/天 × 30 天 = 27 GB;一次漏跑 12 天 = 10.8 GB
跨境:主库 us-east-1、备份 eu-central-1;EU 用户 42 = 12.2%;7 个处理者(5 美国、2 欧盟)
传输评估:7 × 45 分钟 = 5.25 h;年度复核 7 × 30 分钟 = 3.5 h;子处理者变更 3 次/年
泄露:3 级;检测目标 24 h、监管通知 72 h(余量 48 h)、用户通知内部目标 7 天
演练:2 h + 3 个缺口 × 2 h = 8 h/年;4 份模板
验收:12 项四维;权重 0.30/0.25/0.25/0.20;现状 3.80、修后 4.18
季度预算:13 周 × 3 h = 39 h;五项 24 h = 61.5%

344 是账号总数,120 是付费数。 数据请求率、删除率、同意比例都按 344 算;收入与付费相关数字才用 120。

12 张个人信息表与 9 张级联删除表不是同一件事。 12 张里 9 张按 user_id 直接删,2 张按保留期清理,1 张(payments/发票)依法保留 7 年、只做匿名化。

保留期沿用既有组口径。 分析明细 90 天来自产品度量组,备份 30 天来自资产韧性组,审计按事件类型(登录失败 90 天、删除 36 个月、账单 7 年)来自多租户组;本组不另立一套。

所有法律时限都是教学引用。 GDPR 访问请求 1 个月、泄露通知 72 小时、CCPA 45 天、PIPL 及时处理,具体适用与判断以专业意见为准。

使用说明

先列字段,再写政策。 字段表列不出来时,政策只能抄模板;抄来的模板与实际数据流一定对不上。

把删除当成一条跨系统的流程。 主库、对象存储、5 个外部接口、90 天分析与 30 天备份,每一段都要有人负责、有验证方法。

每季度跑一次两小时的演练。 一次导出、一次删除、一次泄露桌面推演;发现问题就回到检查表,而不是写进备忘录。

不要为了「以后可能有用」保留字段。 保留一个字段的成本不是磁盘,是它出现在泄露、导出与问卷里的每一次。

本组的证据与使用方法

证据类型。 本组用的是「字段登记表 + 12 个域名的抓包清单 + 12 件数据请求记录 + 36 次删除日志 + 4 个清理任务的执行记录 + 一次两小时演练的时间线」。没有「最佳实践」式的断言。

如何使用。 先用 01 的六属性表对照自己的 12 张表,再用 02 的读取日志删掉零使用字段,用 05 的脚本跑一次导出,用 06 的清单验证一次删除,最后用 10 的十二项检查做季度体检。

如何复核。 取最近一个月:抓一次包,看域名是否都在政策里;抽一个已删除账号,看 9 张表、18 个文件与 5 个外部接口是否真的没有残留;看一次清理任务的日志是否连续。三项都能对上,这套基线才适用。

系列导航

全部文章 game Indie golang 客户端开发 Minigame Saas rust Python Java cg