让 Agent 帮忙写 SQL,权限和执行必须分层
让 Agent 帮忙写 SQL,权限和执行必须分层
让模型从自然语言生成 SQL 很方便,但数据库连接不能一起交给模型。更稳妥的做法是让 Agent 产出结构化查询计划,再由受控服务校验并执行。
查询计划比 SQL 文本更容易约束
计划中分开表示指标、维度、时间范围、过滤条件和排序。每个字段都从白名单选择,时间范围设上限,默认不允许全表字段和写操作。权限层根据用户身份裁剪可访问的数据域。
错误要告诉调用方下一步
参数不合法、字段无权访问、结果为空和依赖不可用不是一回事。使用稳定错误码,分别提示修改条件、申请权限或稍后重试;不要让前端通过错误文案猜原因,更不要回显表结构和连接信息。
评审三类输入
拿合法请求、语义合法但越权的请求、包含诱导指令的请求走完整链路。检查最终执行语句来自模板,日志只保存脱敏参数与请求标识,模型输出没有绕过执行层。
Agent 可以负责把人话翻译成查询意图,数据库是否执行仍由确定性规则决定。这条分工守住了,后续换模型也不用重写安全边界。