标准答案
- 租户与用户身份由认证上下文确定,检索过滤和数据库查询由服务端构造;客户端传入的 tenantId、conversationId 或 documentId 只作为候选并重新校验。
- 会话、消息、Embedding、缓存、任务、引用和导出文件都带资源归属,所有读取路径使用统一授权函数或策略。
- 用跨租户攻击用例测试 IDOR、缓存碰撞、异步错租户、旧权限命中和引用下载,并对越权尝试告警和阻断。
题目解析
只在向量库加 tenant_id 过滤仍可能遗漏文档 ACL、组织层级和共享资源;授权应基于资源关系而不是一个可伪造字段。
会话摘要和预生成答案可能包含原租户数据,删除或权限撤销时也要处理派生数据。
缓存 Key 必须包含隔离边界,但命中后仍需当前权限校验,防止权限变化造成旧数据泄露。
常见误区
- 把前端下拉框选中的租户 ID 直接用于查询。
- 只测试页面正常访问,不测试直接修改 URL 的 IDOR。
- 认为向量相似度低就不会命中其他租户文档。