当前位置: 首页 > news >正文

智能体查数据库防SQL注入实操

让AI小助手用自然语言查数据库,听着很爽,用户问"上个月华东区销售额多少"它直接给你拉数。但只要你让模型去碰SQL,就得先把安全这关守住,不然出事很快。我搭这玩意儿的时候踩了几个坑,记下来。
最大的威胁是什么
模型生成SQL有两个风险。一个是它可能生成 DROP TABLE、DELETE、UPDATE 这种破坏性语句——你以为它只会查,结果用户一句"把测试数据清掉"它真给你写了删表。另一个是经典SQL注入,用户在自然语言里夹带 ‘; DROP TABLE users; – 这种东西,要是你直接把模型输出拼进执行,就完蛋。
我搭这个智能体用的是一个拖拽配节点的低代码平台,数据库查询那步是它的一个工具节点。但工具节点本身不会替你做安全,得自己加防护层。
第一道:数据库账号只给只读权限
这条最重要,也最省心。我专门建了个数据库账号,只授 SELECT,别的权限一概不给。
CREATE USER ‘agent_ro’@’%’ IDENTIFIED BY ‘你的强密码’;
GRANT SELECT ON sales_db.* TO ‘agent_ro’@‘%’;
– 不给 INSERT/UPDATE/DELETE/DROP/ALTER
FLUSH PRIVILEGES;
智能体连库就用这个账号。这样哪怕模型脑子一抽生成了删表语句,数据库层面直接拒了,权限不够执行不了。这是底线,比任何提示词防护都靠谱。我个人觉得这一条做好了,安全这事就稳了一大半。
第二道:别让模型直接写完整SQL
我没让模型自由生成整条SQL,那太放飞了。改成让模型只输出查询意图的结构化参数,比如查哪张表、哪些字段、过滤条件是什么、时间范围多少,输出成JSON。然后我用一段固定的代码,拿这些参数去拼参数化查询。

模型只输出这种结构,不碰原始SQL

{
“table”: “sales”,
“region”: “华东”,
“start”: “2026-05-01”,
“end”: “2026-05-31”
}
拿到之后用参数化方式执行:
cursor.execute(
“SELECT SUM(amount) FROM sales WHERE region=%s AND dt BETWEEN %s AND %s”,
(params[“region”], params[“start”], params[“end”])
)
注意是 %s 占位符加参数元组,不是字符串拼接。这是防注入的标准做法,用户夹带的恶意内容会被当成普通字符串值,不会被当SQL执行。
这套的代价是灵活性差了点。模型不能想查啥查啥,只能查我预先支持的几种模式。复杂的多表JOIN它干不了。但对大多数业务问答够用,安全换灵活,我认了。
第三道:表名字段名白名单校验
模型输出的 table 字段我不信,万一它编了个表名呢。所以拿到参数后先过一道白名单:
ALLOWED_TABLES = {“sales”, “orders”, “products”}
if params[“table”] not in ALLOWED_TABLES:
raise ValueError(“不允许的表”)
字段名同理。表名字段名这种东西没法参数化(占位符只能填值不能填标识符),只能靠白名单挡。这点容易漏,我一开始就没校验表名,被同事用一句精心构造的话术诱导模型查了张本不该暴露的表,吓出一身汗。
一个小跑题
顺便提一句,查询结果也别一股脑全返给模型。我有次没加 LIMIT,模型拉回来三万多行,token直接爆了,还慢。后来统一加 LIMIT 100,超了就提示用户缩小范围。
三道防线叠起来,这个查库智能体跑了俩月没出过事。模型那层我接的讯飞星辰 MaaS,现成大模型API,不用自建算力。

http://www.jsqmd.com/news/1065127/

相关文章:

  • (2026最新)天津防水补漏正规公司甄选推荐:漏水检测维修-暗管漏水精准定位检测漏水点-卫生间/厨房/屋顶/阳台/渗漏水维修-本地人必选的正规测漏公司 - 即刻修防水
  • 2026年当前北京有实力的商家增长平台如何选?深度解析企叮咚吴燕波的全域增长之道 - 品牌鉴赏官2026
  • MC56F8013无传感器BLDC电机控制:从反电动势原理到工程调试全解析
  • 从零开始:BilibiliDown视频下载器终极使用指南,轻松保存B站视频到本地
  • DeepSeek Function Calling 原理与天气查询实战
  • (2026最新)嘉兴防水补漏正规公司甄选推荐:漏水检测维修-暗管漏水精准定位检测漏水点-卫生间/厨房/屋顶/阳台/渗漏水维修-本地人必选的正规测漏公司 - 即刻修防水
  • PUBG-Logitech图像识别压枪:从零到精通的终极指南
  • ComfyUI-KJNodes终极模型优化指南:快速提升AI图像生成性能的完整方案
  • 英雄联盟玩家必备:3分钟掌握League Akari高效游戏工具
  • 2026年当前浙江高复学校选择指南:聚焦东阳高复中心的办学优势 - 品牌鉴赏官2026
  • Spring AI 2.0 + LangGraph4j 构建生产级AI搜索MultiAgent
  • 高性能MCU实战指南:从ARM Cortex-M7内核到外设的深度优化与避坑
  • SteamShutdown终极指南:告别熬夜等待,智能自动关机解决方案
  • (2026最新)哈尔滨防水补漏正规公司甄选推荐:漏水检测维修-暗管漏水精准定位检测漏水点-卫生间/厨房/屋顶/阳台/渗漏水维修-本地人必选的正规测漏公司 - 即刻修防水
  • AT32UC3L-EK评估板USB接口硬件解析与软件配置实战
  • 2026年当下江阳区窗台石工厂怎么联系?这份专业指南为您解答 - 品牌鉴赏官2026
  • 如何用TV Bro智能电视浏览器彻底改变你的大屏上网体验:终极指南
  • 如何用Video2X将低清视频无损放大到4K:免费AI视频增强完整指南
  • 人脸识别系统-OpenCV+Python
  • 膜结构汽车棚厂家哪个技术先进?
  • RK3588J+YOLOv8边缘部署实战:从ONNX转换到工业级推理优化
  • Claude Code:面向工业级代码深度理解的AI分析引擎
  • 创意解锁:用ABCJS在浏览器中谱写音乐新篇章
  • Codex订阅套餐怎么评估?额度、并发、重置周期和实际成本计算
  • 智能学习系统架构设计革命:从自动化工具到教育技术范式的演进
  • 第4节:我应该选择哪种Kafka?
  • 2026年临沂短视频哪家更有保障:最新权威排名与专业指南。
  • 找非标零件加工厂合作要经历哪些环节?
  • OpenCore Legacy Patcher技术深度解析:老旧Mac硬件兼容性创新解决方案
  • 深度解析Arduino-ESP32对ESP32-C2芯片的技术支持现状与架构演进