如何在不让代理拥有写入权限的情况下授权数据库访问?

Reddit r/AI_Agents 工具

摘要

一位开发者分享了一种解决方案,通过MCP服务器为AI代理提供只读数据库访问,该服务器强制实施READ ONLY事务和突变防护,防止写入操作并降低影响范围。

构建需要从数据库读取的代理时,总会遇到同样的矛盾:为了让代理查询你的数据,你通常会给它一个连接字符串——现在,如果代理幻觉出一个“修复”或被提示注入,它也能执行 `UPDATE`、`DELETE` 或 `DROP`。对于大多数代理用例,实际需求是*读*访问:查找记录、检查模式、拉取一些行进行推理。写功能纯粹是副作用——所有风险都在那里,几乎没有任何价值。因此,我构建了一个MCP服务器,让代理拥有读取权限,并使得写入不可能,而不仅仅是劝阻: * 将其指向Postgres连接字符串,它会暴露一个MCP端点供你的代理连接。 * 每个查询都在 `READ ONLY` 事务内运行——即使代理生成了破坏性查询,数据库也会拒绝。 * 守卫会在执行前拒绝突变语句和危险函数(文件读取、SSRF式调用)。 * 返回模式+结果作为结构化内容供代理操作,无需第二次往返。 我不断回到的一点是:拥有只读数据访问的代理是*有用*的;拥有对生产库写入访问的代理是一种你尚未被收费的负担。好奇这里其他人如何处理——单独只读副本?受限角色?应用层封装?只是信任模型?有一个沙盒可以尝试此方法而不需要连接你自己的数据库(评论中的链接)。
查看原文

相似文章