3. 数据安全与隐私合规的法律法规基线

数据安全与隐私合规不是“有安全意识”就能解决的问题,它首先是一组可被审计、可被追责的法律义务。生产系统一旦上线,数据的采集、传输、存储、使用、共享、删除都会留下痕迹,而这些痕迹正是监管判断企业是否履行义务的依据。本节把 GDPR、个人信息保护法、数据安全法三条主线拆成可映射到工程系统的要求,并给出一份能直接用于生产环境自查的检查清单。

三条法律基线各自管什么

三部法律并非互相替代,而是从不同角度约束同一套数据流。理解它们的差异,才能避免“按 GDPR 做完就以为合规”的误区。

  • GDPR(欧盟通用数据保护条例):以“个人数据”为核心,强调合法性基础、数据主体权利、数据保护影响评估(DPIA)、跨境传输限制、72 小时 breach 通知。它最显著的特点是权利驱动——访问权、更正权、删除权、可携带权、反对自动化决策权,都要求系统具备对应的技术能力。
  • 个人信息保护法(PIPL):同样以个人信息为核心,但增加了“告知—同意”的强绑定、单独同意场景(敏感个人信息、对外提供、公开、处理已公开信息)、个人信息保护负责人、影响评估、境内存储与出境安全评估。它更强调处理目的与最小必要。
  • 数据安全法:不限于个人信息,而是覆盖全部数据。核心是数据分类分级、重要数据目录、数据安全风险评估、出口管制与反制。它要求企业回答“我有哪些数据、哪些是重要数据、谁在什么条件下能访问”。

三者的关系可以概括为:数据安全法管“数据本身的安全”,PIPL 管“个人信息处理的合法性”,GDPR 管“欧盟境内个人数据的权利与跨境”。生产系统若同时面向境内外用户,三套义务会叠加,而不是二选一。

法律义务 → 生产系统控制点映射 GDPR 合法性基础 / 数据主体权利 DPIA / 72h 通知 跨境传输限制 个人信息保护法 告知—同意 / 单独同意 最小必要 / 目的限制 境内存储 / 出境评估 数据安全法 分类分级 / 重要数据目录 风险评估 / 出口管制 全生命周期安全 生产系统可落地的控制点 数据资产与分类分级 字段级标签:PII / 敏感 / 重要数据 数据地图 + 血缘 + 责任人 同意与目的绑定 同意版本号 + 时间戳 + 撤回 处理目的与字段白名单绑定 访问控制与最小权限 RBAC/ABAC + 行级/列级过滤 审批留痕 + 定期权限回收 加密与去标识化 传输 TLS / 存储 AES-256 脱敏、假名化、令牌化 数据主体权利响应 访问/更正/删除/可携带接口 SLA 与工单闭环 跨境与出境管控 数据驻留策略 + 出境评估 标准合同 / 安全评估申报 审计、日志与事件响应 不可篡改审计日志 · 数据访问全链路追踪 · 泄露检测与 72h/及时通知 · 定期 DPIA/风险评估 保留期限与到期删除 · 供应商与委托处理协议 · 员工培训与考核

把义务翻译成生产系统检查清单

法律条文不会直接告诉你“在 Kafka 里怎么配”。落地时要把每条义务拆成“对象—动作—证据”三要素:对象是哪个数据资产或接口,动作是系统必须执行什么,证据是审计时能拿出什么。下面这份清单按数据生命周期组织,可直接作为上线前自查表使用。

阶段检查项可验证证据
采集是否取得合法基础(同意/合同/法定义务)?敏感信息是否单独同意?同意记录表:用户 ID、同意版本、时间戳、撤回状态
采集是否遵循最小必要?字段是否与处理目的白名单一致?字段—目的映射表、SDK 采集清单
传输是否全程加密?跨境传输是否有评估或标准合同?TLS 配置、出境评估报告编号
存储是否分类分级?重要数据是否单独目录?数据地图、分级标签、重要数据清单
存储是否加密与去标识化?密钥是否独立管理?KMS 密钥轮换记录、脱敏规则
使用访问是否最小权限?是否有行级/列级控制?RBAC 策略、审批工单、权限回收记录
共享对外提供是否单独同意?委托处理是否有协议?DPA 协议、共享清单、接收方安全评估
删除是否支持删除权?备份与日志是否同步清除?删除工单、备份清理记录、删除证明
审计是否记录数据访问与操作?日志是否防篡改?审计日志、WORM 存储、告警记录
事件是否有泄露检测与通知流程?是否在时限内上报?应急预案、演练记录、通知模板

落地要点:从“有制度”到“有证据”

很多团队制度写得很全,但审计时拿不出证据。合规落地的关键不是再写一份文档,而是让系统在运行中自动产生证据。以下四个要点最容易被忽视,也最影响审计结果。

第一,同意要可追溯、可撤回。同意不是一次弹窗,而是一条带版本号的状态记录。生产系统应保存 user_id、consent_version、purpose_code、granted_at、revoked_at。当用户撤回时,下游处理链路要能感知并停止。示例表结构如下:

CREATE TABLE consent_record (
  user_id        BIGINT      NOT NULL,
  purpose_code   VARCHAR(64) NOT NULL,   -- 如 ads_personalization
  consent_version VARCHAR(16) NOT NULL,
  granted_at     TIMESTAMP   NOT NULL,
  revoked_at     TIMESTAMP   NULL,
  source         VARCHAR(32) NOT NULL,   -- app / web / offline
  PRIMARY KEY (user_id, purpose_code, consent_version)
);

判断是否合规,不是看表存不存在,而是看“撤回后 24 小时内,推荐、营销、画像任务是否真的不再使用该用户数据”。这需要把同意状态接入实时计算或特征平台,而不是只留在业务库里。

第二,分类分级要落到字段级。数据安全法要求分类分级,但“这张表是重要数据”粒度太粗。生产系统应在元数据中给每个字段打标签,例如 pii:true、sensitivity:L3、retention_days:180。标签一旦进入元数据,就能驱动动态脱敏、访问审批和到期删除。示例:

{
  "table": "user_profile",
  "columns": [
    {"name": "phone",   "tags": ["pii", "sensitivity:L3"], "retention_days": 365},
    {"name": "id_card", "tags": ["pii", "sensitive_pi", "sensitivity:L4"], "retention_days": 180},
    {"name": "city",    "tags": ["quasi_id", "sensitivity:L1"], "retention_days": 730}
  ]
}

有了字段级标签,查询引擎可以在 SQL 解析阶段自动改写:非授权用户查询 id_card 时返回掩码值,而不是等数据出库后再人工处理。

第三,数据主体权利要有接口和 SLA。GDPR 要求一个月内响应访问、删除请求,PIPL 也要求及时处理。生产系统应提供内部 API,把“删除某用户全部数据”变成可编排任务:先定位所有存储位置(业务库、数仓、对象存储、日志、备份、缓存),再逐项执行并记录结果。删除不是 DELETE FROM user WHERE id=? 一条语句,而是一张跨系统任务清单。建议为每个数据源登记“删除执行器”,并保留删除证明。

第四,跨境与出境要前置判断。很多团队在数据已经出境后才补评估。正确做法是在数据流设计阶段就标注数据驻留区域:用户数据默认境内存储,确需出境时走安全评估或标准合同,并在网关层做区域路由。生产系统可以用配置中心维护“数据—区域—传输方式”映射,任何新增跨境链路都必须经过合规评审才能上线。

常见误区:把“用户同意”当成万能钥匙。同意不能覆盖法定义务,也不能让超范围采集变得合法;同意可以撤回,且撤回后必须停止处理。另一个误区是只关注生产库,忽略备份、日志、缓存和第三方 SDK——这些位置同样属于“处理”,同样在监管范围内。

一个可执行的上线前自查流程

把上述要求压缩成一次可操作的自查,建议按以下顺序执行,每步都留下可审计产物:

  1. 画数据流图:标出采集点、存储点、共享点、出境点,标注每类数据的法律属性(个人信息/敏感个人信息/重要数据)。
  2. 核对合法性基础:逐条数据流确认同意、合同、法定义务或其他依据,缺失的立即补采或停止处理。
  3. 检查技术控制:加密、脱敏、访问控制、审计日志是否覆盖全部数据流;用一条真实查询验证脱敏和权限是否生效。
  4. 验证权利响应:发起一次访问请求和一次删除请求,记录从受理到完成的耗时与跨系统执行结果。
  5. 确认事件流程:模拟一次数据泄露,检查检测、定级、通知、上报是否在时限内完成,并保留演练记录。

完成这五步后,团队得到的不是一份“合规声明”,而是一组可被审计的证据链:数据流图、同意记录、权限策略、删除工单、审计日志、演练报告。这些证据才是生产系统真正意义上的合规基线。