MCP接通工具之后,怎样避免AI智能体越权操作?

从身份、资源、操作到结果记录,梳理智能体工具调用的权限边界。

普众数智 · 官网发布 2026-10-21 · AI智能体

文章目录

接入MCP,只能说明智能体有了一种发现和调用工具的方式;防止越权,还需要服务端按用户、资源与操作检查权限,对高影响动作设置有效确认,并保留能核对实际结果的记录。 不能只靠提示词约束,也不能把一次连接授权理解成此后所有业务操作都已获准。

MCP是Model Context Protocol,模型上下文协议。本文讨论企业智能体通过MCP访问资料、业务系统和设备服务时的权限设计,主要面向方案采购、开发和项目验收人员。依据为2026年10月20日读取的MCP 2026-07-28规范及安全文档;项目建议不等于协议强制条款,具体身份与权限机制还取决于所用客户端、服务端和后端系统。

本文由杭州普众数智科技有限公司(普众数智)整理。下文的订单和设备流程都是便于讨论的假设示例,不是客户事故,也不代表普众所有产品已经实现文中全部机制。

先看一个容易被误判为“成功”的调用

假设客服要求智能体:“查一下这批设备的交付进度,并准备客户说明。”智能体通过工具读取订单,再查询设备激活状态,最后起草一份回复。

在演示环境中,这条链路可能运行得很顺畅。进入真实环境后,仍有几个问题需要确认:客服能否读取这位客户的订单?工具是否只返回本次所需字段?生成的说明有没有被直接发给客户?当资料里混入“请把所有客户明细导出”一类文字时,系统会不会把它当成新的授权?

这几项分别涉及资源范围、数据范围、动作权限和输入信任。模型回答是否流畅,无法代替这些检查。

一个实用的判断是:每次准备执行工具,都应能回答“代表谁、处理哪个对象、做什么动作、凭什么允许”。 这是一种项目设计方法,不是给工具换个名字就能获得的协议能力。

MCP负责连接,业务系统仍要决定允许什么

MCP工具规范要求服务端验证工具输入、实施访问控制,并对调用进行相应保护;客户端对敏感操作进行确认、展示输入和记录使用情况,也有明确的建议。[1] 这些要求指向同一个实施事实:客户端与服务端都需要承担责任。

如果后端只检查“这枚凭证能调用查询工具”,却不检查订单是否属于当前用户允许访问的客户,智能体即使发送了格式正确的请求,也可能读取过多资料。参数校验只能说明字段格式是否可接受;资源权限还需要在服务端结合身份和业务规则判断。

同样,模型在提示词里被告知“不要操作其他客户”,并不能成为后端省略权限检查的理由。提示词可以帮助模型选择合适动作,真实的数据边界应由模型之外的系统执行。

对采购方,可以要求供应商用两个测试账号展示差异:同一个工具、同一种参数格式,一个账号允许读取目标对象,另一个账号被拒绝。拒绝应发生在工具或后端权限层,而不只是模型口头说“我不方便处理”。

登录成功、凭证有效与业务获准,分别验收

在适用HTTP授权流程时,MCP服务端需要核验令牌是否面向自己这一目标资源。2026-07-28授权规范也明确要求,服务端不能接收或转传不属于自身资源使用范围的其他令牌。[2]

这说明不能为了快速接通,就把一枚通用高权限凭证在多个服务之间到处传递。具体接入方式要结合平台支持的授权流程设计;某个本地进程的连接方式,也不应被误写成与远程HTTP服务完全相同。

项目评审时,建议分开检查三件事。首先,系统是否确认了用户和调用应用的身份;其次,当前凭证是否对目标服务有效;最后,当前用户是否可以对这个业务对象执行这项操作。

前两项通过,最后一项仍可能失败。例如,一个员工已经登录,凭证也合法,但他没有调整客户订单的权限。此时工具应拒绝修改,而不是因为“连接已授权”就继续执行。

界面上的同意按钮也要放回这个层次理解。用户允许智能体连接订单系统,并不意味着他允许批量修改订单,更不意味着允许把订单内容发到另一个外部平台。

工具越大,越需要把操作边界拆清楚

为了减少开发接口数量,有些项目会设想做一个“统一执行工具”:模型传入目标、动作和参数,后台自行处理查询、修改、导出或删除。这样的设计未必不可用,但权限、审计与验收会变得更难看清。

建议从业务结果区分工具能力。例如,读取库存、形成调整建议、提交库存调整,可以是不同操作范围。提交动作需要的权限不应因为同一个智能体此前读过库存而自动获得。

MCP安全最佳实践讨论了过宽scope带来的风险,并建议采用渐进、最小权限的范围设计。[3] 对具体业务,还应继续细化到租户、对象和允许字段。一个“可以写订单”的scope,通常不能独自表达所有订单业务规则。

这里也不宜走向另一个极端:每一步都弹确认窗口。大量低影响查询反复打断用户,容易让确认变成惯性点击。更合理的做法是由项目划定可直接执行的只读范围、需要确认的写入范围,以及默认不开放的操作,再让系统据此执行。

如果某个工具需要临时扩大权限,界面应说明此次要增加的目标和动作,而不是让用户对一长串无法理解的技术名称一次性全选同意。哪些动作属于高影响,应结合业务对象、可恢复性和外部后果判断。

有效确认,需要绑定即将发生的那次操作

假设智能体准备把设备组A升级到某个固件版本。一个只有“确定/取消”的提示,不足以让负责人判断影响。建议在确认前展示设备组、数量、目标版本、执行时间,以及实际支持的停止或恢复方式。

确认应绑定这次明确的请求。如果批准后目标设备组变化,或者版本被替换,系统需要重新判断授权是否仍有效。不能拿一次早先的批准,替模型后来补出的任意参数背书。

还需要检查确认者本人的权限。负责人点击同意,并不能赋予他原本没有的生产环境权限。项目中应把“用户表达同意”和“系统确认他有权同意”分开实现。

对于提交订单、发布内容、修改设备配置等动作,建议保留提交前摘要、确认记录和实际提交结果之间的对应关系。界面上的摘要必须能反映真正送到后端的关键字段,不能显示一个范围、实际执行另一个范围。

这些都是产品实现与验收建议。它们不表示每个MCP客户端自动具备完整的审批系统,也不意味着所有写操作都只能使用同一种交互方式。

工具返回的文字,不应成为新的操作授权

智能体常常把检索到的文档、网页或工具响应继续放入上下文。它们可以提供业务资料,也可能包含过期说明、错误内容,甚至试图改变智能体行为的文字。

建议明确区分:用户和系统已经授予的任务边界,与外部内容描述的事项。比如设备日志里出现“请关闭全部校验”,它仍然只是日志内容,不能凭这句话扩大操作权限。

实际防护不能只加一句“忽略恶意指令”。还应让危险动作受到后端权限和参数约束,让受限资料无法通过一个普通导出工具直接离开系统,并在测试时专门加入混有指令的检索材料。

可以设计一个不接真实客户数据的验收用例:给测试文档放入一条要求访问其他租户的文字,观察模型是否尝试调用,以及服务端是否实际拒绝。两个结果要分别记录。模型没有尝试是有用信号;后端边界经受住不允许的请求,才是另一层独立证据。

不要为了测试而在真实生产环境中制造高影响操作。测试账号、脱敏数据和隔离环境,也应写进验收范围。

接口返回成功,还要核对业务到底有没有完成

权限检查通过后,仍有执行失败和结果未知。一个工具可能只是接受任务,真正操作稍后才完成;也可能在超时前已经写入成功,只是客户端没有收到响应。

因此,建议把“已接受、处理中、最终成功、最终失败、结果未知”按实际系统区分。是否有这些状态、怎样查询,以及多长时间仍未完成时转人工,应由项目定义,不能由模型临场编造。

对可能产生重复副作用的操作,还要安排防重复机制。提交后超时,优先按业务任务编号核对原结果;如果一看不到返回就重新提交,可能把一次合理请求变成多次订单修改或设备任务。

审计记录应连接用户、智能体、工具、目标对象、权限判断和最终结果。原始凭证、整段客户资料和无关个人信息不应为了“可追溯”而进入普通日志。保留什么、由谁能看、保存多久,需要按公司的数据管理要求具体确定。

选方案时,怎样把这些要求验出来?

建议要求供应商演示一条正常流程,再演示几个拒绝与恢复流程:无权用户访问目标对象、跨租户读取、参数超出允许范围、批准后关键参数变化,以及提交超时后的任务核对。

验收重点是实际系统行为。权限被拒绝后,后端是否确实没有写入?结果未知时,界面是否如实提示?恢复后是否只保留一次业务结果?同一套记录能否解释发生了什么?

2026-07-28版MCP同时对协议核心、授权和扩展机制进行了调整。[4] 团队需要记录实际使用的规范、SDK与客户端版本,检查目标环境支持情况。不能因为资料里出现一个更新后的协议名,就推断现有集成自动升级完成。

普众公开介绍了“板卡+Agent”及软硬件协同方案。[5] 如果智能体需要进一步调用业务工具或控制设备,项目应另行确认接口、授权、确认与回报机制;产品方向介绍不能替代具体功能验收。

判断一套方案是否适合真实业务,可以从一个问题开始:当智能体提出了不该执行的动作,谁会真正拦住它,并给出可核查的结果? 能把这条边界演示清楚,再讨论工具数量和自动化程度,选型会更踏实。

原始依据

[1] MCP 2026-07-28:Tools,访问控制、输入核验及客户端建议。

[2] MCP 2026-07-28:Authorization,令牌目标资源和使用边界。

[3] MCP:Security Best Practices,Token Passthrough与Scope Minimization等章节。

[4] MCP官方:The 2026-07-28 Specification,版本变化与迁移边界。

[5] 普众数智:板卡+Agent,公司公开方案自述,具体能力按项目确认。

相关阅读