AI大模型-阿水
大模型无法依靠提示词守住机密,企业必须在数据切片、多路检索、重排与缓存的全链路落实片段级授权管控。
AI-assisted summary of 文档权限没问题,RAG 为什么还会泄露信息? — original source. Check the original for full context.
Source published:
Key ideas
- RAG 系统的权限泄露根源在于文档切分为片段(chunk)后权限没有同步流转,原系统校验的是整篇文档,而 RAG 必须确保每个召回片段都对当前用户可见。 (0:00)
- 依靠大模型 Prompt 提示词保密、事后敏感词过滤或前端隐藏链接无法防止越权,大模型在改写、总结和推断未授权信息时仍会造成严重泄密。 (0:00)
- RAG 权限控制应基于全链路闭环,未授权内容绝不可流入 Rerank 重排、大模型 Prompt 或可见日志,进入模型前必须完成授权复核。 (1:54)
- 问答缓存极易成为越权漏洞,缓存 Key 必须同时包含租户 ID、用户权限范围哈希和权限版本号,不能仅以问题文本命中全局缓存。 (3:48)
Detailed notes
## Background 该视频由 UP 主“AI大模型-阿水”于 2026 年 11 月 2 日发布在哔哩哔哩(Bilibili)平台。视频简介提供了包含 Agent 学习资料、大模型学习路线、实战案例集、电子书及问题解答的专栏获取链接。
## TL;DR 视频深入剖析了企业原系统文档权限正常、但接入 RAG 后依然泄露工资等敏感信息的根源:在于文档切成片段(chunk)后权限未能同步,且工程团队寄希望于依靠 Prompt 提示词让大模型保密。作者系统梳理了 RAG 全链路的安全防御架构,强调必须通过元数据记录租户、文档与权限引用,并在向量召回、关键词检索、重排及上下文入模前实施严格的带权过滤与授权复核。此外,视频还针对权限变更时间差、缓存击穿、并集陷阱等常见逻辑漏洞提出了针对性的工程解法与主动越权测试方案,指出必须在全生命周期内死守“无权内容绝不入模”的安全底线。
## Atmosphere & style 视频呈现出极其严谨、务实且直击痛点的技术布道风格,没有花哨的说教,而是直奔企业落地大模型时最常遭遇的安全“翻车”现场。讲解条理清晰、抽丝剥茧,语气冷静笃定,处处透露出资深架构师面对复杂工程隐患时的敏锐与警醒。整期内容信息密度极高,给观众一种如同在听资深安全专家复盘高危生产事故并手把手进行架构重构的沉浸感与紧迫感。
## Bulletin - [00:00](https://www.bilibili.com/video/BV1VuxC6jEUK?t=0s) RAG 系统的权限泄露根源在于文档切分为片段(chunk)后权限没有同步流转,原系统校验的是整篇文档,而 RAG 必须确保每个召回片段都对当前用户可见。 - [00:00](https://www.bilibili.com/video/BV1VuxC6jEUK?t=0s) 依靠大模型 Prompt 提示词保密、事后敏感词过滤或前端隐藏链接无法防止越权,大模型在改写、总结和推断未授权信息时仍会造成严重泄密。 - [01:54](https://www.bilibili.com/video/BV1VuxC6jEUK?t=114s) RAG 权限控制应基于全链路闭环,未授权内容绝不可流入 Rerank 重排、大模型 Prompt 或可见日志,进入模型前必须完成授权复核。 - [03:48](https://www.bilibili.com/video/BV1VuxC6jEUK?t=228s) 问答缓存极易成为越权漏洞,缓存 Key 必须同时包含租户 ID、用户权限范围哈希和权限版本号,不能仅以问题文本命中全局缓存。
## Key takeaways - [00:00](https://www.bilibili.com/video/BV1VuxC6jEUK?t=0s) 传统系统鉴权仅在用户打开整篇文档时校验 ACL,而 RAG 系统必须对参与检索、重排和模型生成的每个切片片段进行独立校验。 - [00:00](https://www.bilibili.com/video/BV1VuxC6jEUK?t=0s) 文档切分应使内容边界与授权边界对齐,若单个片段跨越了不同密级(如公开介绍与薪资),必须按更严格权限管控或动态调整切片边界。 - [00:00](https://www.bilibili.com/video/BV1VuxC6jEUK?t=0s) 权限保护的是核心信息而非原文字符串,大模型即使不逐字引用原文,通过改写、总结或概率推断回答仍属于严重越权泄密。 - [01:54](https://www.bilibili.com/video/BV1VuxC6jEUK?t=114s) 文档切片入库时必须包含租户 ID、文档与片段 ID、策略引用、版本号及派生关系等元数据,支撑多租户隔离与动态鉴权。 - [01:54](https://www.bilibili.com/video/BV1VuxC6jEUK?t=114s) 推荐保存策略 ID 或权限引用交由权威服务解析,结合 RBAC、ABAC 与 ReBAC 动态判定,避免在切片上硬编码完整用户名单。 - [01:54](https://www.bilibili.com/video/BV1VuxC6jEUK?t=114s) 权限过滤必须覆盖所有检索入口,包括向量召回、BM25 关键词检索、知识图谱查询及查询扩展,混合检索不可仅对单路做权限过滤。 - [01:54](https://www.bilibili.com/video/BV1VuxC6jEUK?t=114s) 严格坚守安全边界:未授权内容严禁流入 Rerank 重排服务、Prompt 拼接上下文、模型推理阶段以及面向用户的日志系统。 - [01:54](https://www.bilibili.com/video/BV1VuxC6jEUK?t=114s) 权限过滤容易导致有效知识被剔除而搜不到答案,需通过前置过滤、自适应扩大召回候选池(Over-sampling)或预分区存储解决。 - [03:48](https://www.bilibili.com/video/BV1VuxC6jEUK?t=228s) 权限服务必须作为全局唯一的权威来源,当权限副本与实际存在时效偏差且无法确认授权时,敏感场景应遵循默认拒绝(Default Deny)原则。 - [03:48](https://www.bilibili.com/video/BV1VuxC6jEUK?t=228s) 派生内容如摘要、知识图谱和会话记忆必须完整继承血缘权限,不可分割的多文档综合摘要通常要求用户具备全部来源的访问权限。 - [03:48](https://www.bilibili.com/video/BV1VuxC6jEUK?t=228s) 警惕权限计算逻辑本身的漏洞,包括群组并集导致显式拒绝失效、空 ACL 误判为全员公开,以及后端轻信前端 Header 传递的身份属性。 - [03:48](https://www.bilibili.com/video/BV1VuxC6jEUK?t=228s) 安全保障需依托自动化测试,涵盖权限矩阵测试、动态并发撤权测试,以及针对同义改写、多轮诱导和缓存复用的端到端越权渗透测试。 - [03:48](https://www.bilibili.com/video/BV1VuxC6jEUK?t=228s) 在高敏感 RAG 系统中,未授权片段进入大模型上下文本身就应视为安全缺陷,不能等到生成最终答案泄密才介入处理。
## Detailed walkthrough ### [00:00](https://www.bilibili.com/video/BV1VuxC6jEUK?t=0s) 为什么文档有权限,RAG 还会泄露工资等敏感信息?
在企业内部知识库中,经常出现一种看似矛盾的现象:员工在协同办公软件或云盘里明明打不开薪酬文档,但跑到接入了大模型的 RAG(检索增强生成)知识库里问上一句,AI 却把具体薪资清清楚楚地回答了出来。原系统的权限明明没有配置错,漏洞到底出在哪里?问题的根源往往在于“文档切成片段(chunk)以后,权限没有跟着一起走”。
在 RAG 架构中,大语言模型实际读取的通常不是整篇文档,而是文档切分后的一个个 chunk(片段)。原系统校验的是用户能否打开整篇文件,而 RAG 系统必须进一步校验“这个片段能不能用于回答当前用户的问题”。换言之,在 RAG 流水线中,凡是有可能被召回(Retrieve)、重排(Rerank)、拼接进 Prompt 或作为引用(Citation)展示给用户的片段,都必须在每一个流转节点确认当前用户拥有访问权限。重排本质上是给候选内容再次打分并调整展示顺序,但这也绝不代表每一个 chunk 都要靠人工单独去配置访问控制列表(ACL)。如果整篇文档的安全级别与授权一致,片段直接继承文档权限即可;只有在文档内部不同段落存在不同可见范围时,才需要做精细化拆分。
以一份典型的项目报告为例,其内部天然包含多层密级: - **项目介绍**:全员可见; - **技术方案**:仅研发团队可见; - **客户报价**:仅销售负责人可见; - **员工薪酬/预算**:仅 HR 及核心管理层可见。
如果对整篇文档采用统一授权,要么会导致开放过多引发越权泄密,要么会导致连公开的项目介绍部分也被严格限制。片段级控制的核心,就是让“内容边界与授权边界完全对齐”。因此,分块时不能仅按固定的字符数机械切分。如果一个 chunk 恰好跨越了公开介绍与薪酬信息,系统要么必须按照更严格的权限(即薪酬级权限)进行整体管控,要么在切分阶段动态调整切片边界,避免不同密级内容混杂在同一片段中。
```mermaid flowchart TD accTitle: 传统系统与 RAG 系统的权限检查差异 accDescr: 对比传统系统仅在打开文档时鉴权,与 RAG 系统在向量化、召回、模型输入全链路鉴权的差异
subgraph 传统系统["传统系统权限模型"] A["用户打开文档"] --> B{"原系统鉴权 (ACL)"} B -->|"有权"| C["展示整篇文档"] B -->|"无权"| D["拒绝访问"] end
subgraph RAG系统["RAG 系统内容泄露风险"] E["文档机械切片 (Chunk)"] --> F["存入向量/关键词索引"] F -.->|"未同步授权关系"| G["无门禁的内容副本"] G --> H["检索命中敏感片段"] H --> I["送入大模型 Prompt"] I --> J["AI 生成答案 (泄露)"] end ```
针对这种泄露,很多团队寄希望于“让大模型读完内容后再通过 Prompt 提示词守密”,但这在工程上是完全不可行的。例如用户提问:“公司下个季度会不会裁员?”大语言模型在读取了内部未公开的保密资料后,即便严格遵守要求没有逐字引用原文,依然可能回答:“预计缩减 15% 的人员。”这就已经造成了严重的信息泄露。阿水强调:“权限保护的是信息,不只是原文字符串,改写、总结、推断都可能越权。”靠提示词要求保密、生成后敏感词过滤、隐藏前端引用链接或隐藏检索结果,都只是极其脆弱的补充手段。如果只在最终接口或最终答案上做检查,根本无法把控中间的信息流转。“不能先让模型读到,再把守住权限的任务交给模型。”
---
[01:54](https://www.bilibili.com/video/BV1VuxC6jEUK?t=114s) RAG 权限元数据设计与检索全链路防线
为了解决片段切分后的权限归属问题,工程实现上必须在数据入库阶段为每个 chunk 打上完备的元数据,确保系统时刻知晓“它来自哪里、谁能看、有没有更新”。在元数据入口中,必须记录以下核心字段: 1. **租户 ID(Tenant ID)**:用于底层的多租户数据强隔离; 2. **文档 ID 与片段 ID**:精确定位内容物理来源与片段位置; 3. **策略 ID 或 ACL 引用**:用于动态鉴权判定; 4. **内容版本与权限版本**:保障数据更新时可进行权限版本比对与失效处理; 5. **来源范围与派生关系**:支持后期的撤权操作与审计追溯。
在“谁能看”的权限模型设计上,推荐组合使用三种主流架构:基于角色的访问控制(RBAC,按岗位角色授权)、基于属性的访问控制(ABAC,根据部门、密级、地域和使用用途等动态属性判断)以及关系型授权(ReBAC,基于项目成员、文档共享协同及组织上下级架构判断)。阿水特别提醒:“不建议给每个片段写出完整用户名单,保存权限引用,由权威权限服务或策略表解析,更容易应对人员变动,不必批量改写索引。”同时,“租户隔离不等于权限控制”,即便在同一家公司或同一租户内部,不同员工的权限范围也存在巨大差异。
带入权限的检索绝不能只在向量库上做局部过滤,所有检索入口都必须严格遵守权限约束,包括向量召回、关键词召回(如 BM25)、多路召回融合、知识图谱查询以及查询扩展(Query Expansion)后的二次检索。如果在混合检索中只对向量通道做权限过滤,而漏掉了关键词全文检索通道,敏感数据依然会直接破防。阿水给出了规范的 RAG 全链路组织流程:
```mermaid flowchart LR accTitle: RAG 端到端安全检索链路 accDescr: 展示从用户认证到权限解析、带权召回、重排、模型生成及引用的全流程
subgraph 检索前阶段["检索前阶段"] A["用户请求"] --> B["身份认证"] B --> C["解析当前有效权限"] end
subgraph 检索与排序阶段["检索与排序阶段"] C --> D["带权限约束的多路召回"] D --> E["合并与去重"] E --> F["授权复核"] F --> G["重排服务 (Rerank)"] end
subgraph 生成与校验阶段["生成与校验阶段"] G --> H["拼接上下文 (Prompt)"] H --> I["大模型生成答案"] I --> J["校验引用并输出"] end ```
在这条链路中,必须死守一个绝对边界:未经授权的内容绝不能发送给 Rerank 重排服务,更不能发送给大模型服务,甚至不得进入用户可见的日志系统中。之所以在进入模型(入模)前还要再次进行授权复核,就是为了防止索引端权限同步滞后、召回底层实现缺陷,或者在漫长的请求执行过程中用户刚刚被执行了撤权操作。
在工程实践中,加入了权限过滤往往会引发另一个棘手问题:“明明知识库里有答案,用户却搜不到”。例如,系统先从全库检索中粗暴提取出语义相似度前 20 个候选片段,经过权限过滤后只剩下 1 个无关片段;而该用户真正有权访问且最相关的内容,在全库粗排中可能排在第 100 位。这不是系统内没有知识,而是有效知识根本未能进入候选集。解决这一问题的工程方案包括: - **前置过滤(Pre-filtering)**:优先使用搜索引擎或向量引擎原生支持的带元数据过滤搜索; - **自适应扩大候选池(Over-sampling)**:根据权限条件的严苛程度,动态扩大初始召回的 Top-K 数量; - **迭代扫描补充召回**:多轮向后扫描,直到凑满足够的有效授权候选; - **预分区存储**:按租户或稳定的组织权限组进行物理/逻辑预分区,缩小候选空间; - **小集合精确检索**:当特定权限下的内容集较小时,采用精确距离计算代替近似近邻搜索。
同时,必须深度验证近似最近邻(ANN)检索的执行机制。“加了过滤参数不代表底层一定能召回足够的有效结果,要专门评估权限过滤后的召回率。”如果不得不采用后置过滤(Post-filtering),所有未过滤的原始候选集必须严格封禁在可信检索边界之内,在完成权限剔除前,绝不能流向重排服务、大模型或客户端。
---
[03:48](https://www.bilibili.com/video/BV1VuxC6jEUK?t=228s) 权限时效性差、多源缓存击穿与逻辑漏洞防范
权限控制还面临严峻的“时间差”挑战。例如,某员工在下午 3 点被移出某核心项目组,但向量索引区依然保留着旧的 ACL 副本。如果系统将索引内的 ACL 副本当作唯一的判权依据,就会产生危险的越权时间窗口。因此,权限服务必须作为全局唯一的权威来源(Single Source of Truth),通过系统事件或 CDC(变更数据捕获)技术实时同步权限变更。除了在最终检索结果处用当前实时权限进行强制复核外,在输出敏感信息前亦可做最终拦截。索引副本的更新允许异步解耦,但原则是:“不能因为权限副本没更新就继续放行;无法确认授权时,敏感场景应默认拒绝(Default Deny)。”
即便召回环节防守严密,缓存机制(Cache)依然可能轻易击穿授权体系。例如管理员向系统提问了一个涉及核心数据的问题,该问题的问答结果被系统全局缓存;随后一名普通员工问了完全相同的问题,系统直接命中并返回了该缓存答案。虽然这次回答没有触发实时的向量检索,但本质上已经构成了越权信息泄露。
- **问答缓存 Key 的构造**:答案缓存绝不能仅拿“用户输入的问题文本”作为 Key,还必须把租户 ID、用户的有效权限范围哈希、权限版本号以及引用的内容版本号一并作为 Key 的组成部分; - **派生内容的权限继承**:针对文档摘要、知识图谱节点以及多轮对话记忆,必须完整保留其底层的血缘来源关系。内容被大模型总结或重新生成向量,并不意味着它就脱敏成了公开信息; - **不可分割摘要的处理**:如果一份不可分割的多文档综合摘要包含了多个来源的信息,“通常需要有权访问所有相关来源,否则应当只根据他能访问的来源再次生成摘要”。
此外,大量的安全漏洞并非出自大模型,而是出自**权限计算逻辑本身的代码缺陷**。最典型的逻辑漏洞包括: - **群组并集陷阱**:用户属于两个业务群组,不代表两边的权限在所有策略下都能直接取并集,必须明确处理文档权限、片段限制、密级要求、显式拒绝(Explicit Deny)以及临时授权的组合规则; - **显式拒绝失效**:“特别要防住这种错误:片段继承意外扩大父文档权限,本来必须同时满足的条件被写成满足任意一个”; - **空 ACL 判空错误**:当片段的 ACL 字段为空(Empty/Null)时,被程序误判为全员公开; - **轻信前端身份**:后端直接信任客户端 Request Header 传来的部门、角色或用户身份属性,而非从内部经过安全签名的可信认证服务中提取; - **权限判定逻辑碎片化**:鉴权计算分散在各个 Controller 或检索管道中“各算各的”,未做集中化统一策略引擎管理。
为了确保安全措施切实生效,不能仅仅依赖静态代码审查,系统必须建立三类主动越权路径自动化测试:
| 测试类型 | 核心测试内容与验证目标 | |:--- |:--- | | **权限矩阵测试** | 全面覆盖不同租户、角色、群组、片段切片及继承关系,严格验证“允许访问”与“显式拒绝”的双向准确性。 | | **端到端越权测试** | 不仅测试直接提问,还要测试通过**同义改写**、**跨语言提问**、**总结请求**、**多轮对话诱导**、**引用链接窃取**以及**缓存复用**等多种隐蔽手段进行的越权渗透。 | | **动态权限测试** | 模拟在高并发、耗时较长的长轮询请求中,或在用户离职、实时撤权、内容异步更新的并发瞬间,验证系统旧权限是否会发生失效逃逸。 |
在评估 RAG 知识库系统的运营指标时,不能只盯住传统的生成质量指标,必须将安全合规指标纳入核心监控体系: - **授权范围内的召回率**; - **授权上下文进入率**; - **授权答案率**; - **权限变更生效延迟**; - **权限过滤后的查询延迟与结果不足率**。
“对高敏感系统,未授权片段进入模型上下文就应该视为安全缺陷,不能等到答案泄露才指出问题。”RAG 本质上是一个跨组件的**信息流授权问题**。可靠的工程方案绝不仅是在检索代码里生硬地加一个过滤条件,而是必须让授权管控深度贯穿数据入库、多路召回、重排打分、生成推理、答案缓存、引用追踪以及实时撤权的全生命周期。正如阿水在结尾所强调的:“不能先让模型读取用户无权访问的信息,再期待它替系统守住权限边界。”
## Notable quotes > [03:48](https://www.bilibili.com/video/BV1VuxC6jEUK?t=228s) 不能先让模型读取用户无权访问的信息,再期待它替系统守住权限边界。 — 阿水
> [00:00](https://www.bilibili.com/video/BV1VuxC6jEUK?t=0s) 权限保护的是信息,不只是原文字符串,改写、总结、推断都可能越权。 — 阿水
> [03:48](https://www.bilibili.com/video/BV1VuxC6jEUK?t=228s) 对高敏感系统,未授权片段进入模型上下文就应该视为安全缺陷,不能等到答案泄露才指出问题。 — 阿水
> [03:48](https://www.bilibili.com/video/BV1VuxC6jEUK?t=228s) 不能因为权限副本没更新就继续放行;无法确认授权时,敏感场景应默认拒绝(Default Deny)。 — 阿水
> [01:54](https://www.bilibili.com/video/BV1VuxC6jEUK?t=114s) 不建议给每个片段写出完整用户名单,保存权限引用,由权威权限服务或策略表解析,更容易应对人员变动,不必批量改写索引。 — 阿水
> [01:54](https://www.bilibili.com/video/BV1VuxC6jEUK?t=114s) 加了过滤参数不代表底层一定能召回足够的有效结果,要专门评估权限过滤后的召回率。 — 阿水
## Mentioned 阿水, RAG, BM25, RBAC, ABAC, ReBAC, CDC, ANN
## Video description 视频Agent学习籽料、大模型学习路线、、实战案例集、电子书+问题解答👉https://www.bilibili.com/read/cv52978347/?spm_id_from=333.1387.0.0&jump_opus=1自取哦
[Source](https://www.bilibili.com/video/BV1VuxC6jEUK)