1. 生成的 SQL 在执行前必须做哪些校验(语法、只读、LIMIT、表/字段白名单),为什么不能直接执行模型输出
生成的 SQL 在执行前必须做哪些校验(语法、只读、LIMIT、表/字段白名单)?为什么不能直接执行模型输出?
- 执行前校验项
- 白名单与只读检查
- 不可直接执行的原因
直接执行模型输出非常危险,因为模型可能生成语法错误、注入性语句、越权查询或全表扫描。因此执行前必须做多层校验:语法校验,用解析器确认 SQL 可解析且结构合法;只读校验,确认只包含 SELECT 等只读语句,不含 INSERT/UPDATE/DELETE/DDL;LIMIT 检查,确保有限制返回行数或自动补充分页;白名单校验,确认访问的表与字段都在允许访问的范围内,不在白名单内的表/字段予以拒绝。此外还应对表/字段是否真实存在、是否通过权限校验。这些校验在执行网关统一强制,模型不可绕过。
校验的本质是"不信任模型输出",把安全与正确性放在执行层把关。任何一层校验失败都应拒绝执行并返回可解释的错误,而不是冒险放行。