跳转到主要内容
hs-sql-agent
2.0.2
文档 2.0.2
文档 SQL 编译器

SQL 执行模型

了解 hs-sql-agent 如何把不可信 SQL 转换为经过验证、面向具体数据库的语句后再执行。

hs-sql-agent 不会把 AI 生成的 SQL 直接当作可信命令执行。SQL 在真正执行前会经过解析、验证、功能支持检查、访问策略检查以及面向目标数据库的编译。

查询执行路径

查询大致按照以下顺序处理:

  1. 验证 MCP 密钥,并应用该密钥限定的数据库、表、工具和运行时权限范围。
  2. 把受支持的 SQL 解析为结构化定义 / AST。
  3. 验证语句以及输入 SQL 的语义是否处于支持范围内。
  4. 检查目标数据库是否能够安全表达保持这些语义所需的功能。
  5. 为已配置的数据库编译并生成对应 SQL。
  6. 在配置的运行时限制内执行 SQL。

SQL 编译器明确区分输入语义验证和目标数据库功能支持检查两个阶段。不支持的语法,或者无法确认能够安全保持相同语义的功能,会被直接拒绝,而不是静默替换为一个表面相似的结构。

为什么采用“失败即拒绝”(fail-closed)?

跨数据库 SQL 中有大量“看起来相同,实际含义不同”的结构,例如 NULL 行为、类型规则、运算符语义、分页、标识符、函数以及 DML 行为。

对于面向 AI 的执行入口,“尽力改写”很危险,因为 SQL 即使仍然语法正确,也可能已经改变原意。因此 hs-sql-agent 更愿意明确拒绝,也不会在后台偷偷降低语义保证。

按数据库生成 SQL

MCP 的公开接口是统一的,但最终 SQL 会针对不同数据库分别生成。目前支持的数据库包括:

  • PostgreSQL
  • MySQL
  • SQL Server
  • Oracle
  • SQLite
  • Firebird

支持范围是有意限定的。某个数据库出现在支持列表中,并不意味着该数据库提供的所有 SQL 语法都可以使用。只有当某项功能的语义能够被内部表示并验证时,编译器才会把它加入支持范围。