阐述了 Microsoft 的 Model Context Protocol 如何通过「工具形状」(tool schema + 权限标注)让 Agent 调用预定义的安全接口而非自由拼接查询,将访问控制从后端转移到契约层。
微软在礼貌地告诉你,你定义的契约决定了 AI Agent 是否会在你的记录系统内安全运行。不是平台决定的。是你决定的。
这个契约在 Model Context Protocol 的世界里有个名字。它叫做 tool shape(工具形状)。这是你今年要做出的最重要的治理决策,但没人为此安排过一次会议。
在 MCP 之前,Agent 访问 Dataverse 意味着编写查询。FetchXML、SQL,或者任何它能从自然语言组装出来的东西。你要信任一个 LLM 来创作访问模式,然后信任你的安全层来捕捉它搞错的任何东西。
Model Context Protocol 颠覆了这一点。每个能力都变成了一个自描述的工具:一个名称、一个描述、一个类型化的 inputSchema、一个结构化的结果,以及标注该操作是只读还是破坏性的行为注解。
Agent 不再编写任意查询。它调用经过审查、被 schema 限制的操作。元数据发现、记录读取、CRUD、prompt 和知识工具。
这同时缩小了错误表面和攻击表面。但仅当工具被紧密塑造时才行。一个松散塑造的工具会把你刚刚夺回的一切都还给你。
MCP 是 Anthropic 的开放协议,不是微软的发明。这个选择就是整个战略,我们稍后会回到这个。简短版本:Agent UI 被商品化了,数据平面不是。
这是陷阱,也是大多数团队会走入的陷阱。
人们听到"受 schema 约束、受治理的工具",就假设工具定义是安全边界。它不是。Tool shape 是一道第一线控制。它塑造意图并缩小表面。它不是权威执行的底线。
真正的底线仍然是 Dataverse。安全角色。行级安全。通过字段安全配置文件的列级安全。这些机制多年来一直在保护你的数据,因为 Agent 是调用方,它就不会停止成为执行层。
但它只在一个条件下有效:Agent 必须在调用用户的委派上下文中运行。
这整个游戏就是一句话。
当调用携带用户的身份时,行级和列级安全随之而来。Agent 只看到那个人看到的东西。当调用在一个权限广泛的服务主体下运行时,每个按用户的控制都消失了。Agent 看到应用程序注册可以看到的一切,这通常太多了。
现在合并这两个失败模式:
一个广泛塑造的工具("执行任何查询")
在一个权限宽松的服务主体下运行
这同时崩溃了两层。你把 LLM 的钥匙交给了你的记录系统,tool shape 和 Dataverse 安全都挡不住。这是主导的失败模式,它不会在演示中显示。它显示在六周后的审计中。
一个可以预见的本能是把防护栏写进自然语言。"只返回用户拥有的记录。""永远不要删除。""拒绝敏感列。"
别这样做。Prompt 级的指令是指导,不是执行。它们在构造上是可绕过的,把它们视为一个控制是你最终要向不关心你系统 prompt 的人解释事件的方式。
两件事是可信的:工具形状中的 schema 级约束,以及委派身份下的 Dataverse 级执行。其他的一切都是建议。
结论很直白。如果一个控制可以被谈出来,那它就不是一个控制。
MCP 引入了一条供应链。工具有定义,定义有元数据,元数据流入模型的上下文。这打开了一类攻击,大多数 Dataverse 团队从未必须建模过。
工具中毒。恶意或粗心的工具定义以作者未预料到的方式塑造 Agent 行为。
通过工具元数据进行 Prompt 注入。description 字段不是装饰。它被模型读取,那里的敌对内容可以重定向行为。
困惑的副手。持有比请求应得权限更多的 Agent,被欺骗去代表其他人使用它。
把每个工具定义和每个输入都视为不受信任的。就像你会对任何互联网上的人都能调用的公共 API 端点一样,因为在功能上这比感觉更接近真实。
微软本可以建造一个仅限 Copilot 的围墙花园。他们没有。他们在一个开放协议上进行了标准化,这意味着 OpenAI、Claude 和你的自定义 Agent 都可以通过同一扇门到达 Dataverse。
看起来像是在放弃什么。它不是。它把锁定向上移动。
Agent 和模型层变成可互换的、可商品化的。增值资产保持在微软想要的地方:表、业务逻辑、Entra 用于身份、Purview 用于治理。商品化 Agent UI,拥有数据平面。
如果你在做平台赌注,那就是信号。不要过度投资任何单一 Agent 运行时。投资每个 Agent 都必须通过的基础。身份和受治理的数据会超越无论哪个模型在赢得这个季度。
真正的难活从来不是启用服务器。那是一个开关。
真正的难活是几乎没有组织为 Agent 消费而设计其 schema 或安全模型。你的表假设了一个有安全角色的表单中的人类。现在调用方是一个不知疲倦的、快速的、偶尔出现幻觉的过程,它将调用任何你暴露的东西。
所以真正的项目是一个决定,表接表,操作接操作:这些中哪些应该曾经对 Agent 可调用?大多数不应该,至少现在还不应该,对于写入肯定不应该。
按顺序做这些。每一个都假设前一个已经到位。
Dataverse MCP Server 确实是出色的工程。它还悄悄地把一个安全边界重新定位到大多数团队没有看的地方:工具契约,以及它运行的身份。
让形状紧凑,身份委派,你会得到比大多数组织今天运行的更好的深度防御。搞错要么,你就直接把一个语言模型连接到你的记录真实来源,防护栏已关闭。
微软告诉你是哪一个。契约由你定义。
这个表面进化得很快。工具目录名称、GA 对比预览版状态,以及精确的委派对比服务主体传播语义应该在你针对它们设计之前根据当前 Microsoft Learn 文档进行检查。架构原则保持;精确的旋钮仍在移动。
这篇文章最初发布在 az365.ai。我是 Alex Pechenizkiy,一位 Azure 和 Power Platform 解决方案架构师,对微软 AI 栈进行诚实、厂商中立的分析。更多内容请访问 az365.ai。