企业知识库怎么防止越权:四层权限设计要点

先说一个反常识的结论:前端看不到,不等于没权限
我们给几家企业做过知识库的事后检查,问题几乎都出在同一处:页面上明明看不到的文件,换个问法就被 AI 答出来了。原因不复杂——系统先做向量检索,拿到 Top-K 片段,再在渲染的时候把没权限的条目隐藏掉。过滤发生在展示层,模型早就把那段内容读进去了,你只要让它换个说法转述一下,这条权限限制就失效了。
所以这条原则必须先划清楚:权限判断要发生在检索之前或检索之中,不能发生在展示之后。下面按四层拆:数据分级、部门与角色授权、检索层过滤、日志审计。企业知识库这件事,结构设计上省一步,后面都要返工。
第一层:数据分级,四档就够了
分级难的不是定标准,是让人愿意填。见过不少知识库上线时列了七八级,三个月后标签全是空的,等于没分。经验是把级别压到四档,并且默认继承:文档从哪个目录、哪个业务系统同步过来,就继承那儿的级别,只有少数文档需要人工上调或下调。
| 级别 | 典型内容 | 可见范围 | 检索时怎么处理 |
|---|---|---|---|
| L1 公开 | 产品介绍、对外物料、员工手册 | 全员,含访客账号 | 不额外过滤 |
| L2 内部 | 流程制度、培训资料、通用模板 | 在职员工 | 校验账号在组织树内 |
| L3 受限 | 客户合同、报价单、项目交付文档 | 所属部门或项目组 | 带部门/项目组标签过滤 |
| L4 机密 | 薪酬、股权、未公开财务、核心参数 | 指定人员 | 独立索引,或者干脆不入库 |
L4 那条值得多讲一句。不是所有资料都适合放进知识库。薪酬表、股权协议这类东西,一年被问不了几次,放进来收益低、风险高,技术上再严也怕配错一次。我们的建议是这类内容不进主库,需要时走人工渠道。
第二层:授权别只按人,组织树、角色、文档 ACL 三层叠加
纯 RBAC(按角色)和纯 ACL(按文档)单独用都不够。角色说不了“他是哪个部门的”,文档 ACL 又说不了“他能做什么动作”。通常的拼法是:组织树决定归属,角色决定动作(查看/编辑/管理),文档 ACL 决定这一份具体能不能看。检索时取三者交集。
几个容易被忽略的点:
- 组织树要能表达挂靠和兼职。一个人同时挂在市场部和某个项目组很常见,树结构做不了这件事,后面全是手工补丁。
- 临时项目组的授权要有到期时间。项目结束权限还在,是越权的高发区,我们见过两年没回收的项目组权限。
- 离职和调岗的同步链路要单独测。账号停用了,索引里的权限标签可能还是旧的。
第三层:检索层过滤,这一层不能省
向量库(Milvus、Qdrant、pgvector 之类)都支持带过滤条件的检索,关键在于你把权限写进过滤条件里,而不是拿回来再筛。三种做法的差别很实际:
- 先过滤后检索:把 acl 条件拼进检索请求,召回的全是有权限的片段。这是默认选择。代价是过滤字段设计不好会拖慢检索,标签太碎时索引效果也会下降。
- 先检索后过滤:召回 Top-50 再筛掉无权限的,剩下可能不够 3 条,答案质量自然变差;把 Top-K 放大又拉高延迟和 token 成本。只适合 L1/L2 这种大范围可见的库。
- 展示层隐藏:这不算方案。模型已经看到内容了,套话就能套出来。这条不在讨论范围。
再补几个我们实际踩过的坑:
- 切片单独打权限标签,后期维护不起。让 chunk 继承父文档的 acl 字段,文档改了权限就同步更新对应切片,别在切片上另起一套。
- 答案里带“原文出处”链接,点进去要再校验一次身份。别把链接当成通行证,那等于把权限外包给了浏览器。
- 会话缓存用 query 当 key,会把 A 的答案发给 B。缓存 key 里必须带用户 ID 或权限指纹。
- “帮我对比这几份合同”这类跨文档请求,容易跨权限拼内容,要先做文档范围收缩再检索。
- 权限变更到索引生效之间有窗口期。L3/L4 的文档宁可每次实时校验,慢几十毫秒换确定性。
如果你们的知识库还要接智能体做自动执行,权限就得跟着工具调用一起管,这部分可以参考AI 智能体私有化部署里的权限边界设计。
第四层:日志审计,用来发现问题而不只是留痕
日志字段建议记全:谁问的、问了什么、召回了哪些文档 ID、其中多少条被权限过滤掉、最终答案引用了哪几段。这些数据平时没人看,但出问题时能定位到具体环节——是分级填错了,还是过滤条件漏了某个部门。
还有一个用法是看异常。某个账号连续问“某某客户的报价”,每次都被过滤,要么他在试探,要么是权限配错了,两种情况都值得看一眼。过滤命中率突然下降也说明有问题。
内容出口也别忽略。知识库管住了,答案能复制、能截图、能转发到微信群。水印、复制留痕、外发审批要不要上,看你们行业和客户合同的约定,不强求一刀切。
私有化部署在这件事上有天然优势:日志、索引、模型都在自己机房,权限规则不用向外部解释。私有化部署是我们给涉及客户合同、财务数据的企业常推的形态,具体选型看数据和并发量。
落地顺序与验收动作
- 把文档来源收口。散在个人网盘、微信文件、本地硬盘里的资料,先不管权限,先集中上来,否则分级无从谈起。
- 定四档分级和默认继承规则,挑两个部门试点,别一次铺全公司。
- 准备一份越权测试集:把已知的 L3/L4 文档标题改写成 20 到 50 个自然提问,用低权限账号跑一遍,召回应该是 0。这是上线前必须做的验收动作,比看演示有用。
- 上线后每月抽查日志,盯过滤命中率和被拒提问。
下一步其实很简单:今天就找 10 个你确定低权限账号不该看到的问题,去问一遍你们的知识库。答出来了就先别扩用户,把检索层的过滤条件补上再谈推广。想一起看过滤条件怎么写、或者想找些同类场景的拆解,可以翻知识库里的其他篇目,也可以直接联系我们,电话 400-873-2750。