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

Safe DML

预览修改范围、固定审批内容、重新验证目标行,只提交用户实际批准的那一次数据修改。

DML 采用比普通查询更严格的执行流程,因为系统必须确保最终提交的修改与用户实际批准的内容完全一致

01 编译
02 预览
03 批准
04 重新验证
05 提交
先预览影响范围 UPDATE/DELETE 不会立即修改数据,而是先在预览事务中读取当前会受影响的目标行。
固定批准内容 一次性批准挑战会绑定已验证的执行计划、策略版本、目标行数以及目标行集指纹。
提交前再次核对 提交事务会重新查询目标行;如果当前状态与批准时不一致,就取消操作。

UPDATE 与 DELETE

  1. 编译数据修改

    在请求用户批准之前,先解析、验证并授权这条 SQL,再把它编译为可执行计划。

  2. 预览目标行

    打开预览事务,在不执行修改的情况下读取当前满足条件的目标行。

  3. 创建一次性批准信息

    把批准挑战绑定到已验证的执行计划、策略版本、目标行数和目标行集指纹。

  4. 通过 MCP Elicitation 请求用户批准

    发送 elicitation/create,要求 MCP 客户端通过表单明确取得用户批准。

  5. 消费已批准的挑战

    用户接受后验证并消费这次性挑战,避免它被重复使用为通用权限凭证。

  6. 在提交事务中重新查询

    再次读取目标行,并将当前行集指纹和行数与批准时的预览结果进行比较。

  7. 只有全部一致才提交

    只有执行计划、策略、批准挑战、行数和目标行集都没有变化时,才执行用户批准的那项数据修改。

INSERT VALUES

INSERT ... VALUES 在修改前不存在一组“已经匹配的目标行”。因此审批协议不会绑定行集预览,而是绑定不可变的插入数据和已经验证的执行计划。

Elicitation 是必需条件

execute_dml_sql 和已发布的 DML Custom Tools 要求 MCP 客户端支持 form Elicitation。无法完成审批交互的客户端不能使用这些数据修改路径。

这与普通 UI 确认弹窗不同。批准挑战是服务器端数据修改协议的一部分,并且会在真正执行前再次验证。

相关文档