Veto 对比只读 Postgres MCP 服务器
诸如 Postgres Scout MCP、mcp-server-postgres 等服务器,以及 Glama 上的类似条目,以只读模式、SQL 注入防护和表结构探索的方式把 Postgres 暴露给 AI 智能体。那是一种访问控制策略。Veto 是一道语句级安全门禁——是互补,而非替代。
一览
| 只读 MCP | Veto | |
|---|---|---|
| 核心机制 | 角色 / 连接限制——智能体无法写入 | 确定性分析——智能体对危险 SQL 拿到 block |
| 正当的写入 | 完全被拦截(或使用单独的写入连接) | SQL 通过时即允许——Veto 不执行 |
| 临时智能体 SQL | 仅限 SELECT | DELETE/UPDATE/迁移在运行前接受审查 |
| 绕过风险 | 角色配置错误、连接串错误 | 智能体跳过该工具——由工作流 + Pro 策略缓解 |
| 成本 / 顺序扫描 | 通常不是关注点 | 提供 schema 时对大规模扫描给出 warn |
| 连接生产环境 | 是(只读) | 从不 |
何时适合只读 MCP
智能体应当只查询生产环境——分析、表结构发现、支持查询。只读 Postgres MCP 服务器是一种成熟的模式(通常自托管)。
何时适合 Veto
智能体编写迁移、运行修复,或以写入权限触碰预发布环境。只读角色会阻断正当工作,并且曾被绕过。Veto 回答的是:"给定这条确切的 ALTER TABLE / DELETE,裁定是什么?"——包括隐藏在 CTE 中的破坏性语句。
为何不只用只读?
只读是粗粒度的:它无法拦截在允许写入的角色下对十亿行表执行的高成本 SELECT,当智能体持有迁移连接时它也帮不上忙。Veto 额外提供细粒度、可复现的 findings,供智能体(或人)在执行前据此行动。
推荐的技术栈
用只读 MCP做生产环境探索,再在智能体可写入的任何连接上用 Veto。角色定义什么是可能的;Veto 判定每一条语句。