14.4 访问、保留与合规运行:权限终会过期,副本必须能找到
数据平台完成了数据地图,也给分析表做了 pseudonymisation。审计时却发现:离职分析师的长期权限仍在,紧急导出的 CSV 没有到期日,删除请求只处理主库,备份和特征表里还留着副本。
隐私控制只有进入身份、数据生命周期、供应商和事件运行,才不会停留在评估报告里。
本课目标
- 组合 RBAC、ABAC 和数据策略实现最小权限;
- 管理授权申请、复核、过期与 break-glass;
- 让保留和删除覆盖派生、缓存、备份与下游;
- 建立请求响应、第三方管理和隐私事件流程。
1. 角色只是授权起点
RBAC 按岗位授予能力,易于管理,却容易形成“analyst 可以看所有分析数据”的粗粒度角色。ABAC 可加入:
- 数据分类与领域;
- 用户团队、培训、地点和雇佣状态;
- 目的、工单、环境和设备状态;
- 行/列范围、时间窗口和输出限制。
下面用 Python 标准库演示单次授权判定。分类用显式允许集合,不对 public、sensitive 等字符串做大小比较;所有属性假定由可信身份、授权和资产目录服务提供:
from datetime import datetime, timezone
def can_read(user, grant, asset, purpose, now):
try:
if now.utcoffset() is None or grant["expires_at"].utcoffset() is None:
return False
return (
user["role"] == "analyst"
and user["domain"] == "operations"
and user["employment"] == "active"
and grant["subject_id"] == user["id"]
and grant["asset_id"] == asset["id"]
and grant["action"] == "read"
and grant["purpose"] == purpose == "approved_safety_analysis"
and grant["ticket_status"] == "active"
and grant["revoked"] is False
and asset["classification"] in user["allowed_classifications"]
and now < grant["expires_at"]
)
except (KeyError, TypeError, AttributeError):
return False
user = {"id": "synthetic-analyst", "role": "analyst", "domain": "operations",
"employment": "active", "allowed_classifications": {"pseudonymous"}}
asset = {"id": "mission_summary", "classification": "pseudonymous"}
purpose = "approved_safety_analysis"
grant = {"subject_id": user["id"], "asset_id": asset["id"], "action": "read",
"purpose": purpose, "ticket_status": "active", "revoked": False,
"expires_at": datetime(2026, 9, 5, 12, tzinfo=timezone.utc)}
now = datetime(2026, 9, 5, 11, tzinfo=timezone.utc)
print(can_read(user, grant, asset, purpose, now))
print(can_read(user, grant, asset, purpose, grant["expires_at"]))
print(can_read(user, {**grant, "revoked": True}, asset, purpose, now))
print(can_read(user, grant, {**asset, "id": "raw_locations"}, purpose, now))
# True, False, False, False (one per line)到期时刻使用半开边界,所以正好到期即拒绝;缺失必要属性或时区也拒绝。这只演示策略判定,身份认证、属性类型校验、工单审批、行列范围与实际执行仍由服务端负责。请求者自报用途不能替代有效授权;撤销状态还要及时传播,不能等长期缓存自然过期。客户端 filter_columns() 不是访问控制,策略必须在不可绕过的数据服务或存储层执行,并明确拒绝规则的优先级。
2. 权限生命周期
申请:资产、目的、范围、时长和负责人
审批:owner/数据保护/安全按风险参与
发放:最小范围、短期凭证、绑定身份
使用:查询、导出和策略决策留痕
复核:owner 定期确认真实需要
撤销:离职、转岗、到期、事件或用途结束永久共享账号和静态密钥会破坏问责。优先使用个人/工作负载身份、短期凭证和自动撤销。
3. Break-glass 不是管理员全通证
紧急访问应:
- 只在定义事件类型下启用;
- 强认证和理由;
- 限定资产、操作与短时有效;
- 实时通知值班/owner;
- 不可篡改审计;
- 事后独立复核。
“role_admin = all”既缺少用途也没有时间边界。平台维护者不应默认能读取明文业务数据,控制面权限和数据面权限应分离。
4. 加密与密钥边界
传输和静态加密是基础,但具体协议、算法、模式和密钥长度应遵循组织采用的现行标准与风险要求,不在课程里硬编码一个永远适用的 “TLS/AES-256” 清单。
更关键的是:
- 密钥由专用系统生成、轮换和审计;
- 数据密钥与密钥加密密钥分层;
- 密钥管理员与数据读取职责分离;
- 备份、日志、临时文件和导出同样保护;
- 解密发生在最小可信边界;
- 密钥撤销/crypto-shredding 的适用条件经过验证。
加密不能阻止被授权应用进行过度查询,因此仍需用途、输出和行为控制。
5. 保留从目的和义务推导
对每类记录定义:
保留目的与开始事件
活动期和归档期
法定/合同 hold
到期动作:删除、匿名化或复核
主库、派生、缓存、搜索索引和导出范围
备份到期与恢复后、开放读取前的再删除机制
owner、执行证据和例外期限“保留七年”不是通用规则。不同辖区、记录类型和义务不同;冲突需要法律与业务 owner 记录依据。
例如 GDPR 第 17(3) 条包含履行法定义务、法律请求等删除例外;必须记录适用依据、受限范围和复审条件,不能把 hold 变成继续分析的许可。参见 GDPR 官方文本。
6. 删除是分布式工作流
删除请求或到期策略可能涉及:
- identity mapping 与主记录;
- 事件表、宽表和数据湖快照;
- 搜索索引、缓存和队列;
- 特征、训练集和模型工件;
- 报告、导出和第三方;
- 备份和灾难恢复副本。
血缘提供候选下游,数据地图补足非自动路径。工作流需要幂等、重试、范围证据和失败队列。
先解析并保留执行所需的最小主体 ID 与目标范围,再撤去身份映射;如果先删映射,后续可能连该删哪条特征都找不到。删除台账还需阻止迟到事件、历史重放和备份恢复重新写回被删记录,并限制台账自身的保留与访问。
备份常不能逐条立即修改。可缩短保留期、隔离恢复环境并记录 tombstone;恢复后应在开放读取前重放删除台账。若选择 crypto-shredding,要核对全部有关密钥和明文副本,且不能销毁仍用于其他应保留记录的共享密钥。是否满足具体义务,仍取决于适用制度和经过验证的实现。
一个请求的主库任务已经成功,仍可能不能关闭:
| 目标 | 状态 | 下一步与证据 |
|---|---|---|
| 主库 | deleted | 记录版本与删除核对结果 |
| 特征缓存 | retry_pending | 按同一请求 ID 重试,验证旧值不可读取 |
| 隔离备份 | deferred_until_expiry | 记录到期日、恢复前删除控制与批准依据 |
这里主库删除率为 100%,整个请求仍有未完成项。每个适用目标都要有已验证结果,或有明确依据、期限和负责人继续跟踪的例外;对请求者说明实际范围,不能把排进队列写成“所有副本已删除”。
7. 模型中的删除不能轻率承诺
个体数据可能影响模型参数,但从训练集删一行不等于现有模型已遗忘。可选策略:
- 定期从已更新训练快照重训;
- 分片训练或可重构工件;
- 在适合场景评估 machine unlearning;
- 记录模型与训练数据版本关系;
- 在无法验证遗忘时如实说明范围。
还要保留必要审计证据与最小删除日志,避免为了证明删除而保存完整被删数据。
SISA 研究 通过预先限制训练影响范围来减少部分遗忘成本。它需要相应训练组织和工件,不能给任意现成模型补一个删除接口就获得同样保证。
8. 个体请求与纠正传播
在适用法律、合同或组织政策下,可能需要支持访问、更正、删除、限制、反对或可携带等请求。工程流程应:
- 安全验证请求者身份,避免披露给冒名者;
- 确认辖区、范围、例外和截止时间;
- 搜索主记录、别名和下游;
- 汇总为可理解输出或执行更正/限制;
- 通知适用接收者;
- 记录决定、执行证据和申诉路径。
不要在身份验证中过度收集新证件,也不要假定所有请求类型和时限全球相同。
9. 第三方与跨边界处理
供应商评估不能止于问卷。记录:
- 数据、目的、角色和处理地点;
- 子处理者和变更通知;
- 安全与隐私控制证据;
- 事件通知、协助请求和审计权;
- 保留、返还、删除及证明;
- 终止后的迁移与访问撤销;
- 跨境/跨域所需的适用机制。
合同无法代替技术限制。只提供必要字段、独立身份、短期授权、导出限制和持续日志。
10. 隐私事件响应
隐私事件包括未经授权披露,也包括错误关联、过度收集、错误自动决定、无法删除和用途漂移。
检测与保护证据
遏制访问、共享或决策
识别数据、人员、接收者与时间范围
评估可能伤害与适用通知义务
修正数据、决定和下游副本
与受影响者/监管者/合作方沟通(如适用)
恢复前验证控制
复盘并更新数据地图、策略和演练通知门槛与时限随法律和事实变化,应由授权法律/隐私负责人决定;工程团队负责及时提供可靠范围和时间线。
例如 GDPR 第 33、34 条对控制者、处理者以及向个人通知设有不同条件与时限,不能把一个“72 小时”计时器套到所有事件和接收者。系统应分别记录知悉时间、风险判断和通知对象。
11. 运行指标
- 过期/孤儿权限和平均授权时长;
- 敏感导出、异常查询和 break-glass 复核;
- 到期数据删除完成率与失败队列;
- 个体请求各阶段耗时和返工;
- 无 owner、无保留规则和未知接收者资产;
- 供应商删除证明与权限撤销;
- 事件检测、遏制、范围确认和救济时间。
指标不能激励草率关闭请求;抽样验证输出正确性和受影响者结果。
常见误区
- 列级过滤函数就是权限系统:用户可绕过客户端代码读取底层数据。
- 管理员必须能看所有明文:控制面维护与数据访问可以分离。
- 主库删除即完成:派生、导出、第三方和恢复路径仍在。
- 合规清单全球通用:义务依赖辖区、角色、目的和数据。
练习
- 把粗粒度 analyst 角色改成带目的、时限和分类的策略。
- 为 break-glass 设计发放、实时告警和事后复核。
- 画出一个删除请求覆盖缓存、特征、模型、备份和供应商的状态机。
- 模拟错误身份关联事件,列出遏制、纠正和通知证据。
小结
隐私运行的核心是让权力和数据都有期限:访问可追踪并自动过期,副本可发现并按目的退出,错误能传播更正,事件能及时遏制与救济。
数据从采集走到治理与隐私后,下一卷转入 AI 与机器学习,讨论模型如何学习、验证并进入真实决策。