Milvus 与 RAG 权限边界:集合、元数据和原文分别授权
RAG 的权限不能只检查“能否查询某个集合”。向量、元数据、原文和最终上下文可能来自不同存储,需要在每次跨层取数时保留同一份授权条件。
先界定问题
先定义租户、知识域和文档级过滤如何进入检索请求。返回主键后,读取原文时仍要重新校验权限,不能因为向量检索已经通过就默认原文可见。
处理与验证
把一次检索拆成三次授权判断:是否能访问集合,元数据过滤能否命中文档,以及拿到主键后是否能读取原文。三处都带同一租户与知识域条件;任何一处拒绝都停止拼装上下文,不把不可见文档标题或片段写进日志。
样本要覆盖同租户允许、跨租户拒绝、集合可查但原文不可读、过滤后为空,以及元数据存储不可用。每条只记录主体与资源的脱敏标识、权限判断和停止位置,不能为了排障保存原文内容。
权限规则变更后,用同一组主体与文档关系重放集合、元数据和原文三层检查。结果只要有一层比基线扩大可见范围,就停止发布;缓存也必须带授权上下文,不能复用其他租户已经取回的内容。