Skip to content

权限过滤失效与敏感数据暴露 Near Miss 复盘

30 秒复盘结论: 这是一个设计型 Near Miss:候选版本的答案缓存键缺少租户和权限指纹,缓存命中后又没有对引用文档重新鉴权,金丝雀查询在发布前发现跨租户引用并阻断上线。止损是关闭受保护知识库缓存、撤销候选入口并审计相关请求;长期修复是让权限贯穿检索、缓存和引用,采用版本化权限指纹、文档级再鉴权、权限变更主动失效与 Fail Closed。当前没有真实用户数据泄露证据,Near Miss 是否实际执行仍需发布记录证明。

目录

1. 摘要与小白解释

公司档案室按员工工牌开放不同柜子,但复印台会缓存上一位员工的答案。如果缓存只看“问了什么”,不看“谁在问”,下一位员工问同一句话就可能拿到上一位的复印件。工牌对应身份和租户,柜门规则对应 ACL,复印台缓存对应答案缓存,交付前再看一次工牌对应引用级鉴权。

类比忽略了群组继承、权限撤销延迟、公开与私有文档混合、行列级权限和生成模型可能在无引用时泄露上下文。安全设计必须 Fail Closed,无法确认权限时拒绝返回。

项目内容
类型Near Miss 设计稿,发布前阻断
风险相同问题跨租户命中旧答案或引用
发现金丝雀查询、审计日志、跨租户引用告警
直接原因Cache Key 缺租户/权限版本,命中后未再鉴权
根本原因权限只被当作检索前过滤器,没有成为全链路数据契约
止损关闭缓存、撤销入口、冻结版本、审计请求

2. 故障教学图片

图:故障教学图片|权限过滤旁路与发布前阻断

替代文本: 用户身份、权限策略、检索过滤、答案缓存和生成引用形成链路;缓存键缺租户、权限版本过期和引用未再鉴权构成旁路,金丝雀查询与审计告警在发布前阻断,事实边界为 Near Miss。

教学图片待人工审图用户身份、权限策略、检索过滤、答案缓存和生成引用形成链路;缓存键缺租户、权限版本过期和引用未再鉴权构成旁路,金丝雀查询与审计告警在发布前阻断,事实边界为 Near Miss 暂不公开,正文与 Mermaid 图可正常阅读。

读图结论: 权限必须贯穿候选召回、缓存命中、上下文选择和最终引用,不能只在链路入口检查一次。

红色路径是可能的缓存旁路,绿色路径是发布门禁,蓝色修复链路把权限指纹和文档级鉴权固化到协议。图中不包含真实租户或敏感数据。

图片生成记录: model=gpt-image-2generated=2026-07-15prompt_version=v1查看 Prompt。PNG C2PA 记录 softwareAgent=gpt-imageversion=2.0

质检状态: Agent 已核对文字、箭头和 Near Miss 标签;维护者审图待完成。

3. 事实边界与安全证据

证据边界: 本文没有真实用户请求、敏感文档、发布流水或安全工单,不能确认一个 Near Miss 已在真实环境执行。正文描述的是可执行的候选版本阻断演练,所有租户与文档 ID 均为合成值。

结论类型证据或验证动作
Cache Key 未包含权限上下文可能跨租户复用工程风险用租户 A 预热、租户 B 查询相同问题
金丝雀门禁能发现全部越权不成立只能覆盖已设计样本,仍需属性测试和审计
返回无引用就没有泄露不成立上下文本身可能进入生成结果
已发生真实数据泄露无证据必须有审计日志和受影响请求确认

合成 Trace 字段:request_idtenant_idsubject_id_hashrole_set_hashacl_versionpolicy_decision_idcache_key_hashcache_hitsource_tenant_iddocument_id_hashcitation_authz_result。日志不得记录原始敏感内容和完整身份信息。

text
cross_tenant_reference_count = source_tenant_id 与 request tenant_id 不一致且未被授权的引用数
revocation_propagation_delay = 权限撤销时间 - 所有缓存与索引完成失效时间
fail_closed_rate = 权限依赖异常时被安全拒绝的请求数 / 权限依赖异常请求数

影响域包括检索候选、父子块、重排、缓存、上下文拼装和引用;未进入候选环境的稳定版本不应被写成受影响。

4. 技术栈与架构

4.1 技术点清单

技术点 ID技术点/环节类型采用方案链路职责版本/证据边界
TP-01身份与权限上下文协议租户、主体、角色、ACL 版本组成权限指纹贯穿检索和缓存演练协议
TP-02候选过滤服务检索前硬过滤加重排后校验防止未授权文档进入上下文待权限测试
TP-03缓存隔离存储权限指纹和语料版本参与 Key阻止跨边界复用待并发测试
TP-04最终引用门禁服务文档级再次鉴权,异常 Fail Closed防止旁路和撤权延迟泄露待演练

图:架构|RAG 权限、缓存与引用的纵深防御边界

替代文本: 身份服务生成权限上下文,策略引擎为检索过滤和缓存命名空间提供权限指纹;候选、重排、上下文和引用都经过授权边界,审计与金丝雀查询独立监控。

图表加载中…

读图结论: 纵深防御允许任一层失误被后续门禁阻断,缓存命中不能跳过授权链路。

5. 风险与阻断流程

图:技术调用流程|跨租户缓存旁路的发现、止损与修复验证

替代文本: 租户 A 的授权答案进入候选缓存,租户 B 查询相同问题时旧键可能命中;引用门禁和金丝雀检测发现 source tenant 不一致,拒绝返回并触发缓存关闭、审计与修复回归。

图表加载中…

读图结论: Near Miss 的关键证据是危险结果在到达用户前被独立门禁拒绝,而不是“暂时没人反馈”。

6. 止损、根因与选型

止损顺序:立即关闭受保护知识库答案缓存;停止候选发布并保留制品;使相关缓存命名空间失效;审计请求与引用,不把日志中出现的敏感原文再次扩散;按证据决定通知和升级范围。

  • 直接原因: 旧 Cache Key 未包含租户和 ACL 版本,命中后引用未再鉴权。
  • 根本原因: 权限语义没有进入缓存、上下文和引用的数据契约。
  • 促成因素: 权限撤销不触发失效;测试只验证召回过滤;安全日志缺来源租户。
  • 非原因: Embedding 相似度不会替代授权判断;调低 Top-k 也不能修复越权。
  • 防线有效点: 金丝雀查询与引用级 Fail Closed 在发布前阻断。
技术点 ID候选方案优点缺点/代价适用场景不适用场景选择结论与依据
TP-01只传 user_id简单无法表达租户、角色和撤权版本单用户私有应用企业多租户不采用
TP-01权限指纹可版本化和审计需要稳定规范化多租户 ACL权限上下文不可确定采用
TP-02生成后文本脱敏易接入未授权内容已进入上下文且可能漏检辅助防泄露访问控制不能替代硬过滤
TP-02检索硬过滤 + 后校验纵深防御增加查询成本权限知识库无 ACL 数据采用
TP-03全局答案缓存命中率高无法安全隔离完全公开语料私有知识库禁止
TP-03权限命名空间缓存继承授权语义命中率降低、失效复杂多租户知识库高频撤权且无法及时失效条件采用
TP-04Fail Open可用性高权限依赖异常时泄露无敏感数据受保护内容禁止
TP-04Fail Closed + 文档再鉴权安全边界明确权限服务异常会拒绝敏感知识库可公开内容的弱依赖路径采用

7. 验证、防复发与面试表达

验证矩阵覆盖:跨租户同问、跨角色同问、群组变更、权限撤销、索引切换、父子块继承、缓存预热、权限服务超时、旧 ACL 版本、无引用生成。安全用例只使用合成敏感标记,不使用真实隐私数据。

防复发:权限契约进入 Schema;所有缓存写入来源租户和 ACL 版本;撤权事件触发缓存与索引失效;引用返回前批量鉴权;CI 加入属性测试和跨租户回归;审计日志脱敏且不可被普通业务账号读取;Runbook 固定“阻断—保全证据—失效—审计—通知评估—回归”。

难点卡: 最难的是证明数据在哪一层首次越过授权边界,同时避免排障日志成为第二次泄露源。

亮点卡: 将权限从入口条件升级为检索、缓存和引用的版本化协议,并用独立金丝雀证明门禁有效;代价是缓存命中率和权限服务依赖增加。

反模式: 用相似度阈值代替 ACL;把 tenant_id 只放日志不放 Cache Key;权限服务超时时 Fail Open;将真实敏感文本复制到工单。

7.1 30 秒面试回答

这是一个权限 Near Miss 演练:候选答案缓存缺少租户和权限版本,相同问题可能跨租户命中,但金丝雀查询和引用再鉴权在发布前阻断。我先关闭受保护缓存、撤销入口并审计请求,根因是权限只用于检索前过滤,没有贯穿缓存和引用。长期修复采用权限指纹、文档级鉴权、撤权失效和 Fail Closed;当前没有真实泄露证据。

7.2 60~90 秒与追问

排查时对齐 request_id、tenant_id、ACL 版本、Cache Key、source tenant 和 document_id,先判断结果来自本轮检索还是旧缓存。修复不能只把 tenant_id 加进日志,而要进入缓存命名空间和引用授权;权限依赖异常时宁可拒绝,也不能返回未确认内容。验证覆盖跨租户、跨角色、撤权、索引切换和无引用答案,并确保安全日志本身脱敏。

追问:如何证明 Near Miss 而不是事故?撤权传播延迟怎么测?父子块权限如何继承?权限服务不可用如何降级?语义缓存还能不能用?

8. 总结

一句话记忆: 权限不是检索前的一次过滤,而是贯穿缓存、上下文和引用的全链路契约。

  • Near Miss 必须有发布前阻断证据,不能只说“没人投诉”;
  • 缓存键必须继承租户、角色、ACL 与语料版本;
  • 最终引用需要再次鉴权,权限异常默认 Fail Closed;
  • 安全排障必须脱敏并控制证据访问;
  • 当前是设计型 Near Miss,未证明真实环境已执行。