Supabase实测:MCP+Skills如何让AI代理安全操作数据库

Supabase实证:MCP+Skills组合让AI代理安全正确地操作数据库
Supabase团队通过实验证明,AI代理的瓶颈不在能力而在指导。仅有MCP工具的代理会遗漏RLS等安全设置,而MCP+Skill组合在所有测试模型上都表现更优。编写高质量Skill的三大原则是:指向单一真相源、关键信息放主文件防止被跳过、定义明确的最佳工作流。产品的"可代理性"正成为新竞争维度。
AI代理够聪明,但缺乏正确指导
在近期的AI Engineer大会上,Supabase AI工具工程师Pedro分享了他们开发Agent Skill的实战经验。他指出了一个关键洞察:当前AI代理的瓶颈不在于能力,而在于指导。
代理在处理日常任务时已经足够智能,但面对特定产品的安全规范和最佳实践时,它们往往会犯致命错误。Supabase团队发现,代理在操作数据库时经常遗漏行级安全(RLS)设置、依赖过时的训练数据,而且"非常懒惰,不愿承认自己不知道"。
行级安全(Row Level Security, RLS)是PostgreSQL提供的一种细粒度访问控制机制,允许数据库管理员定义策略来控制哪些用户可以查看或修改表中的哪些行。在传统的权限模型中,权限控制粒度只到表级别——要么能访问整张表,要么完全不能。RLS将这一粒度细化到行级别,例如可以设定"用户只能看到自己创建的订单"。对于Supabase这类BaaS(Backend as a Service)平台而言,RLS尤为关键,因为客户端直接与数据库交互,没有传统后端服务器作为中间层来过滤数据。如果RLS配置缺失或被绕过,意味着任何经过认证的用户都可能访问到其他用户的敏感数据。

实验验证:MCP+Skill vs 纯MCP的安全性对比
安全漏洞的典型案例
Supabase团队设计了一个精确的对比实验:让同一个模型(Claude Sonnet 4.6)执行相同任务——在已启用RLS的表上创建SQL视图。
在PostgreSQL中,如果在启用了RLS的表上创建视图,但没有显式设置security_invoker = true标志,该视图会绕过RLS策略,导致数据泄露。这是一个典型的安全陷阱。
要理解这个陷阱的严重性,需要了解PostgreSQL视图的权限执行机制。视图默认以视图创建者的权限执行查询,这被称为"security definer"语义。这意味着即使底层表启用了RLS策略,通过视图访问数据时,RLS策略会被绕过,因为系统认为是视图的所有者(通常是超级用户或高权限角色)在执行查询。PostgreSQL 15引入了security_invoker属性,设置为true后,视图会以调用者(即实际查询视图的用户)的权限来执行,从而让RLS策略正常生效。这个细微但关键的配置差异,正是AI代理容易遗漏的"隐性知识"——它不会导致语法错误或执行失败,但会静默地制造安全漏洞。
实验结果非常明确:
- 仅使用MCP工具的代理:未设置安全标志,创建了存在数据泄露风险的视图
- MCP+Skill的代理:正确识别并实现了安全配置
多模型大规模评估结果
团队进一步设计了6个Supabase特定场景,在4个不同模型(Claude Code/Opus 4.6、Sonnet 4.6、GPT 5.4、GPT 5.4 Mini)上进行了三种条件的对比测试:
- 基线:无MCP、无Skill
- 仅MCP:只有工具调用能力
- MCP + Skill:工具加指导
这里需要理解MCP(Model Context Protocol)的技术背景。MCP是Anthropic于2024年底开源的一项协议标准,旨在为AI模型提供与外部工具和数据源交互的统一接口。在MCP出现之前,每个AI应用都需要为每个外部服务编写定制化的集成代码,导致了N×M的集成复杂度问题。MCP通过定义标准化的客户端-服务器架构,让AI代理可以通过统一的协议调用数据库查询、文件操作、API请求等各类工具。MCP服务器暴露工具(Tools)、资源(Resources)和提示(Prompts),而AI代理作为MCP客户端来消费这些能力。然而正如本实验所揭示的,仅有工具调用能力并不足够——代理知道"能做什么",但不一定知道"应该怎么做"。
结果在所有模型上都是一致的:Skill + MCP的组合在每个模型上都优于其他条件。这证明了工具本身不够,正确的使用指导才是关键。
编写高质量Agent Skill的三大原则
原则一:不要重复信息,指向单一真相源
Pedro强调,Skill不应该复制已有文档内容,而应该引导代理去查找最新文档。你需要"非常固执地"要求模型去搜索网络或查阅文档,提供查找路径和方法。
Supabase为此做了一个创新尝试:通过SSH暴露文档。这让代理可以像浏览文件系统一样导航文档,因为代理对文件系统操作和Linux工具非常熟悉。这种接口设计降低了代理获取最新信息的摩擦。
原则二:能被跳过的内容一定会被跳过
这是Pedro分享的最实用的经验。代理在加载Skill时表现得"非常懒惰":
- 工具调用和在线获取信息对代理来说"成本高昂",它们默认使用训练数据
- 即使Skill中有引用文件(reference files),代理也很少主动加载
- 如果问题需要多个引用文件的信息,代理几乎不可能加载两个以上的文件
实践建议:将绝对不能遗漏的信息直接放在skill.md主文件中。Supabase的安全检查清单最初放在引用文件中,代理经常忽略它;移到主文件后,问题解决了。
原则三:要有主见,定义最佳工作流
你最了解自己的产品,不要害怕为代理定义明确的操作流程。Supabase为数据库Schema管理定义了这样的最佳工作流:
- 在开发/暂存数据库上自由执行DDL操作
- 满意后,运行Supabase提供的advisor检查安全和性能问题
- 修复问题后,才创建migration文件
这里涉及数据库开发中的一个重要概念。DDL(Data Definition Language)是SQL中用于定义和修改数据库结构的语句集合,包括CREATE TABLE、ALTER TABLE、DROP INDEX等操作。在现代软件开发中,数据库Schema的变更通常通过Migration文件来管理——每个Migration文件记录一次结构变更,可以按顺序应用或回滚,类似于代码的版本控制。然而,如果代理在每次探索性修改时都生成Migration文件,会导致大量冗余的中间状态被记录。Supabase推荐的工作流是先在开发环境中自由实验,确认最终状态后再生成一个干净的Migration文件,这与经验丰富的数据库工程师的实际工作习惯一致。
这个流程避免了代理每次修改Schema都生成migration文件的低效行为。
Agent Skill的技术结构解析
Skill本质上是包含指令、脚本和资源的文件夹,代理会渐进式地发现它们。结构包括:
- Front Matter:包含名称和描述,代理据此决定何时加载该Skill
- skill.md:主指令文件,包含核心信息
- 可选资源:脚本(执行操作)和引用文件(补充信息)
Agent Skill代表了一种新的知识组织范式,它与传统的API文档、README或教程有本质区别。传统文档面向人类读者,依赖读者的判断力来决定何时应用哪些信息;而Skill是面向AI代理设计的结构化指令集,需要考虑代理的认知特性——包括有限的上下文窗口、倾向于走捷径的行为模式、以及对文件系统操作的熟练度。Skill的渐进式发现机制(progressive discovery)意味着代理不会一次性加载所有信息,而是根据任务需要逐步获取相关指令。这种设计既节省了宝贵的上下文空间,也模拟了人类专家"按需查阅手册"的工作方式。
说个细节,Skill是代理无关的(agent-agnostic),越来越多的代理正在采用这一开放标准。
Skill分发的挑战与当前方案
目前Skill生态面临的最大挑战是分发系统。Pedro坦言这个问题尚未完全解决:
- Vercel推出了skills package方案
- 各种插件打包方式(.clot、.cursor等)是模型特定的
- Supabase当前的做法是将Skill打包在代码仓库中,通过开源或skills package获取
当前AI代理生态中的Skill/插件分发面临类似早期包管理器的碎片化问题。不同的AI编码助手(如Cursor、Claude Code、Windsurf等)各自定义了自己的配置格式和插件机制——.cursorrules、CLAUDE.md、.windsurfrules等互不兼容。Vercel推出的skills package方案试图提供一个跨代理的标准化分发机制,类似于npm之于JavaScript生态的角色。这种标准化的缺失意味着工具提供商需要为多个平台维护不同格式的指令文件,增加了维护成本。行业正在朝着agent-agnostic(代理无关)的开放标准方向演进,但完全统一仍需时日。
用户现在可以通过一条命令安装Supabase的Agent Skill并立即使用。
总结:产品的"可代理性"成为新竞争维度
这次分享揭示了一个重要趋势:在AI代理时代,产品的"可代理性"(agent-friendliness)正在成为新的竞争维度。Supabase的实践证明,精心编写的Skill文档能显著提升代理操作产品的安全性和效率。对于任何提供开发者工具的公司,编写高质量的Agent Skill正在从"锦上添花"变为"必备能力"。
核心要点
- MCP+Skill组合在所有测试模型上都显著优于纯MCP方案,证明工具+指导的组合才是最优解
- 编写Skill的三大原则:指向单一真相源避免重复、关键信息必须放主文件防止被跳过、要有主见定义最佳工作流
- AI代理在操作数据库时容易遗漏RLS等安全设置,Skill可以有效弥补这一缺陷
- Supabase创新性地通过SSH暴露文档,让代理像浏览文件系统一样获取最新信息
- Skill分发系统尚未标准化,目前主要通过代码仓库和开源方式分发
相关推荐
教程攻略Cursor+Codex双IDE协同:开源项目二开实战方法论
基于实战经验总结的开源项目二次开发完整方法论,详解Cursor+Codex双IDE协同工作流,涵盖二开七环节、MVP验证、AI读源码技巧,帮助开发者三天跑通项目、两周完成业务集成。
教程攻略Cursor多Agent实战:50分钟搭建Next.js全栈博客
使用Cursor IDE多Agent协作模式,50分钟内从零搭建全栈博客。涵盖Next.js、Clerk认证、Supabase数据库集成,详解4个AI Agent分阶段开发流程与关键避坑经验。
教程攻略从零搭建AI软件工厂:Cursor工程师的多Agent协作实战经验
Cursor工程师Eric分享AI软件工厂构建实战:从自动化六层级、护栏设计、并行Agent管理到规模化扩展,详解如何用多Agent协作实现7×24小时高效软件开发。