多租户 RAG 检索泄露:向量不是匿名,按用户过滤也未必是隔离
一句话摘要:在多租户 RAG 里,两个直觉都靠不住——「向量化了就匿名了」和「按用户过滤了就隔离了」。在已研究的 embedding 设置下,向 量可被反演回近似原文(含 PII),所以别把它当匿名化结果;检索是按相似度排序、不是按权限,ACL 若配在检索之后而非之前,最相关的那块私有 chunk 可能来自别的租户;而共享缓存 / 长期 memory 的一个边界 bug,就能把一个用户的私有上下文带进另一个会话。
一句话摘要:在多租户 RAG 里,两个直觉都靠不住——「向量化了就匿名了」和「按用户过滤了就隔离了」。在已研究的 embedding 设置下,向 量可被反演回近似原文(含 PII),所以别把它当匿名化结果;检索是按相似度排序、不是按权限,ACL 若配在检索之后而非之前,最相关的那块私有 chunk 可能来自别的租户;而共享缓存 / 长期 memory 的一个边界 bug,就能把一个用户的私有上下文带进另一个会话。
一句话摘要:把私有文本嵌入成向量、存进向量库,不等于匿名化——嵌入可被反演回原文。Song & Raghunathan(CCS 2020)在其设置下从句嵌入恢复出输入约 50–70% 的词(词集,无序);Morris 等的 vec2text(EMNLP 2023)对 GTR-base 嵌入把 32-token 短文本逐字精确还原 92%。结论先行:嵌入是私有数据的另一种表示,不是脱敏后的产物——按「可还原回原文」来加密、做访问控制、设保留期,别因为「我们只存了向量」就放松。