45.多租户知识库怎么做用户团队文档和向量数据隔离
多租户知识库怎么做用户、团队、文档和向量数据隔离码海寻道 · 大模型、智能体与 RAG 工程组件系列第 45 篇多租户知识库最危险的错误不是页面显示错了而是用户在检索结果、引用或 Agent 工具中看到了另一个租户的数据。隔离设计必须贯穿身份、API、数据库、对象存储、向量检索、缓存和日志。一、先定义租户模型Tenant ├── Users ├── Teams ├── Roles └── KnowledgeBases └── Documents常见关系用户属于一个或多个团队团队拥有或共享知识库文档属于知识库和租户权限可以继承也可以针对文档单独配置。不要只在用户表里增加一个tenant_id就认为完成了多租户设计。真实系统还要处理跨团队协作、离职、邀请、转移和审计。二、隔离的四个层次认证隔离Token 或会话中记录用户身份但不要完全信任客户端提交的租户 ID。授权隔离服务端根据用户、角色、团队和资源关系计算可访问范围。数据隔离PostgreSQL 行级策略、对象 Key 前缀和向量过滤共同限制数据范围。运行隔离缓存 Key、任务队列、日志、限流和模型调用预算都要带租户维度。三、PostgreSQL 中的租户字段业务表通常显式保存tenant_idCREATETABLEdocuments(id uuidPRIMARYKEY,tenant_id uuidNOTNULL,titletextNOTNULL,statustextNOTNULL,created_at timestamptzNOTNULLDEFAULTnow());CREATEINDEXidx_documents_tenant_statusONdocuments(tenant_id,status);所有 Repository 查询都应带租户范围。可以使用 PostgreSQL Row-Level Security 增加数据库层保护但应用层仍要正确设置当前租户上下文。身份服务应把“用户属于哪些租户、在租户内拥有什么角色、能访问哪些知识库”作为授权事实源。请求进入业务层后生成不可由客户端覆盖的AuthContext数据库连接、对象存储 Key、向量过滤和缓存 Key 都从这个上下文派生。四、向量数据如何隔离常见方案同一 Collection tenant_id成本低、租户数量扩展容易但每次搜索必须带可信过滤条件。每个租户独立 Collection隔离强但集合、索引和运维数量随租户增加适合少数大型租户或强隔离场景。分区或分区键适合稳定且数量可控的数据域。不要为每个用户随意创建 Partition。无论采用哪种方案向量库都不能成为唯一授权层。检索命中后仍应进行业务回查和权限确认。同时要测试空过滤、错误字段和召回不足时的行为确保任何检索路径都不会因为过滤条件缺失而退化为全库搜索。最终返回前仍应按chunk_id重新确认资源可见性。五、对象存储路径隔离tenants/{tenant_id}/knowledge-bases/{kb_id}/documents/{document_id}/v3/source.pdf服务端生成对象 Key客户端不能自定义跨租户路径。下载使用短时预签名 URL并在生成前检查用户权限。六、缓存 Key 必须带租户错误rag:answer:{query_hash}正确rag:answer:{tenant_id}:{kb_version}:{model_version}:{query_hash}会话、限流、权限范围、检索结果和任务状态都要避免跨租户复用。Redis 共享集群时尤其需要做 Key 规范和访问审计。仅加入tenant_id还不够问答缓存通常还要包含user_id或权限版本、知识库serving_version、模型版本、检索参数和查询哈希。角色变化、文档下线和权限回收时应提升权限版本或主动失效避免旧缓存绕过新授权。七、API 权限检查流程请求 Token ↓ 解析 user_id ↓ 服务端确定 tenant_id 和 team_scope ↓ 检查资源所属关系 ↓ 生成数据库和向量过滤条件 ↓ 执行查询 ↓ 结果再次脱敏与校验不要让前端直接控制tenant_id、team_id、document_ids或向量过滤表达式。前端可以提出目标权限范围必须由服务端裁决。八、跨租户操作要单独设计平台管理员、客服和数据分析任务可能需要跨租户访问但不能让普通业务接口自动获得这种能力。跨租户操作建议使用独立接口、独立角色和短时授权并要求填写工单或审批单。操作结果要带目标租户列表、原因、操作者和审批链禁止通过修改请求头、查询参数或模型工具参数临时扩大范围。应使用独立角色和权限明确的操作原因限定的租户范围更详细的审计必要时双人审批导出数据的脱敏和水印。九、租户删除和数据生命周期删除或注销租户时需要清理PostgreSQL 记录 对象存储文件 Milvus / pgvector 向量 Redis 缓存和会话 消息队列中的任务 搜索和监控中的敏感副本 备份中的合规数据大规模删除应异步执行并向管理员展示进度、失败项目和最终审计结果。不要因为界面显示“租户已删除”就假设所有副本已经同步清理。删除任务应先写入租户级 tombstone阻止新请求和新任务继续写入再按依赖顺序清理 PostgreSQL、对象存储、向量索引、Redis、队列消息、日志和备份副本。清理任务要可重试、可审计并能报告仍未删除的副本。十、隔离测试不能只测正常请求至少测试用户修改请求中的 tenant_id猜测其他租户 document_id通过搜索结果获取跨租户引用通过缓存命中得到其他租户答案旧任务完成后覆盖新租户状态对象存储预签名 URL 越权Agent 工具调用绕过前端权限批量导出和管理员接口越权。十一、上线检查清单身份和租户范围由服务端确定PostgreSQL 查询包含租户约束或 RLSMilvus 检索包含可信过滤对象存储 Key 按租户隔离Redis Key 包含租户和版本任务、日志和审计带租户上下文跨租户管理员操作独立授权删除、备份和恢复有明确策略已完成越权和缓存串租户测试。结语多租户隔离不是某个组件的单一功能而是一条贯穿身份、权限、数据库、对象存储、向量库、缓存、任务和日志的系统边界。任何一层遗漏都可能让前面的隔离失效。至此第八篇章“后端、前端与系统集成”全部完成。下一篇章将进入评估、监控与安全从大模型应用如何评估开始。参考资料PostgreSQL 官方文档Row Security PoliciesMilvus 官方文档Filtered SearchOWASPAuthorization Cheat Sheet本文为“码海寻道”原创技术文章。多租户系统涉及权限和数据合规正式上线前应进行独立安全评审与恢复演练。

相关新闻

智慧监测-红外极小目标检测与分割数据集 远距离红外监控,识别入侵低空无人机、飞鸟,提前告警,防范黑飞。

智慧监测-红外极小目标检测与分割数据集 远距离红外监控,识别入侵低空无人机、飞鸟,提前告警,防范黑飞。

智慧监测-红外极小目标检测与分割数据集 3000张针对无人机和鸟类的红外图像组成,提供使用中波红外相机在 3-5 μm 波长范围内捕获的红外图像,分辨率为 640512 像素,拍摄距离为 100 至 800 米。 该数据集主要以小型目标为特色,占总…

2026/10/4 19:09:14 阅读更多 →
折腾一晚上,我让OpenClaw把微信公众号的文章搬运到飞书了:TaoToken 统一 Key 打通抓取与写入链路

折腾一晚上,我让OpenClaw把微信公众号的文章搬运到飞书了:TaoToken 统一 Key 打通抓取与写入链路

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/4 19:09:14 阅读更多 →
【AI编程】【Claude Code】----让CC帮你合并代码并解决冲突:从rebase到冲突收尾的实操大纲

【AI编程】【Claude Code】----让CC帮你合并代码并解决冲突:从rebase到冲突收尾的实操大纲

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/4 19:09:14 阅读更多 →

最新新闻

如何看懂 Antigravity Manager 配额监控面板:实时掌握 Gemini / Claude 额度还剩多少

如何看懂 Antigravity Manager 配额监控面板:实时掌握 Gemini / Claude 额度还剩多少

如何看懂 Antigravity Manager 配额监控面板:实时掌握 Gemini / Claude 额度还剩多少 【免费下载链接】AntigravityManager Antigravity Manager is a powerful Electron-based application designed to manage accounts and processes for the Antigravity applica…

2026/10/4 19:43:38 阅读更多 →
单片机烧录方式全解析:ISP、ICP、IAP原理与实战区别

单片机烧录方式全解析:ISP、ICP、IAP原理与实战区别

新手第一次做单片机开发,最容易在“程序下载”这个环节卡壳。板子焊完了,芯片也点亮了,可是固件怎么烧进去?身边的老工程师张口就是“用ISP下载”“用ICP”,你听得一头雾水。其实这三个缩写对应的是三种完全不同的烧录…

2026/10/4 19:43:38 阅读更多 →
HarmonyOS 7 QuickDock 闪控窗开发实录 06:floatView × 回归验收:25轮场景回归、资源基线与发布前收口【鸿蒙心迹】

HarmonyOS 7 QuickDock 闪控窗开发实录 06:floatView × 回归验收:25轮场景回归、资源基线与发布前收口【鸿蒙心迹】

QuickDock 到第五篇,已经把所有关键能力都拆成了相对独立的状态层: TaskRegistry 业务任务DisplayModeCoordinator 闪控窗 / 闪控球WindowSessionStore 位置 / 暂存BackgroundTaskPolicy 前后台运行策略FloatRecoveryCoordinator 窗口异常恢复QuickDockR…

2026/10/4 19:43:38 阅读更多 →
算法日常・每日刷题--<动态规划>4

算法日常・每日刷题--<动态规划>4

91. 解码方法 - 力扣(LeetCode)91. 解码方法 - 一条包含字母 A-Z 的消息通过以下映射进行了 编码 :"1" -> A"2" -> B..."25" -> Y"26" -> Z然而,在 解码 已编码的消息时&…

2026/10/4 19:43:38 阅读更多 →
大模型能力评测实战:用 TaoToken 统一通道跑通 MMLU、SWE-bench、C-Eval 与 GPQA 的配置与验证

大模型能力评测实战:用 TaoToken 统一通道跑通 MMLU、SWE-bench、C-Eval 与 GPQA 的配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/4 19:43:38 阅读更多 →
电机驱动入门笔记02:六步驱动电路设计

电机驱动入门笔记02:六步驱动电路设计

一、案例 参考开源项目: https://oshwhub.com/tai-tou-dui/chuan-kou-lei-xing-wu-shua-dian-ji-dian-ji-qu-dong 1、6个MOS 6 个 IRF540NPBF(Q1~Q6)就是六步换相的 6 个开关,一相 2 个(上管+下管) 3 相 = 6 个,和三相桥完全对应。

2026/10/4 19:42:37 阅读更多 →

日新闻

KT148A语音芯片外挂8002D功放的工程实践指南

KT148A语音芯片外挂8002D功放的工程实践指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/4 1:00:58 阅读更多 →
LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/4 1:00:58 阅读更多 →
ARM架构深度解析:从RISC设计理念到交叉编译实战

ARM架构深度解析:从RISC设计理念到交叉编译实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/4 1:00:58 阅读更多 →

周新闻

KT148A语音芯片外挂8002D功放的工程实践指南

KT148A语音芯片外挂8002D功放的工程实践指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/4 1:00:58 阅读更多 →
LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/4 1:00:58 阅读更多 →
ARM架构深度解析:从RISC设计理念到交叉编译实战

ARM架构深度解析:从RISC设计理念到交叉编译实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/4 1:00:58 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/4 11:40:45 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/4 9:43:54 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/3 9:42:36 阅读更多 →