开发者 Andi 让 AI Agent 帮忙重命名数据库角色。Agent 生成了一条 sed 正则,在 macOS 上执行——静默失败。连接串因此指向了错误的库,Prisma 把真实开发库当成临时库,直接执行了全库重置。
一次重命名操作,变成了一次数据清空。事故的起点不是模型写错了业务逻辑,而是一条在 Linux 上成立、在 macOS 上失效的正则表达式。
环境差异如何放大成灾难
Agent 是按 Linux 规范生成 sed 正则的。macOS 用的是 BSD 版本的 sed,语法行为并不一致。正则没有报错,只是没生效——这种静默失败最危险,因为后续步骤会默认前一步已经成功。
连接串于是指向了错误的数据库。Prisma 判断这是一个临时库,执行了全库重置。整条链路上没有任何一个环节拦住它。
权限开得太大,小 Bug 变成大事故
事故的另一半原因在权限。Agent 拥有 DDL 权限,也拥有生产库的访问权限。一个本可以只影响单条记录的小问题,因为权限边界缺失,被放大成了毁灭性风险。
作者由此提出的核心判断是:大模型不仅会写出有 Bug 的业务逻辑,更容易在自动化执行系统级脚本时,因环境差异踩中底层坑点。
四条防护清单
针对 AI 编码工具,作者给出的建议集中在权限与流程上:
- 剥夺 Agent 的 DDL 权限,不让它碰结构变更
- 隔离 Shadow 数据库,避免真实库被当作临时库处理
- 配置破坏性命令拦截,在危险操作前设卡
- 实施异地备份,作为最后一道兜底
这套清单背后的原则是最小权限、强制人工确认(Human-in-the-loop)和自动化快照。核心思路不是让 Agent 更聪明,而是让它即使犯错,也犯不出无法挽回的错。
Agent 的能力边界在扩大,但它执行脚本时面对的环境差异、权限配置、失败静默这些问题,仍然是传统工程里的老问题。区别在于,Agent 会把这些问题以更快的速度、更少的犹豫执行到底。
热门跟贴