网易首页 > 网易号 > 正文 申请入驻

Claude Code 删完数据库,还说一切正常。。。。

0
分享至



2026 年 7 月 12 日,一名开发者发文称,Claude Code 在检查数据库迁移问题时,误将生产数据库当成临时测试数据库使用,导致生产数据库的全部表结构被删除并重新创建。


更令人意外的是,Claude Code 完成操作后并未发现异常,反而报告称生产环境一切正常,“没有进行任何修改”。

根据当事人的说法,Claude Code 最初正在排查测试环境中的数据库迁移记录与实际结构不一致问题。随后,开发者追问生产环境是否也受到了影响,希望 Claude Code 只对生产数据库进行检查。

Claude Code 随即运行 Prisma 数据库迁移工具的 migrate diff 命令,用于比较迁移文件与生产数据库结构之间是否存在差异。

问题出在命令参数上。

Claude Code 将生产数据库地址同时设置为待检查数据库和“影子数据库”。

影子数据库是 Prisma 用于临时重放迁移记录的工作空间,系统默认其内部数据可以随时清除,并不适合存放真实业务数据。

Prisma 官方文档明确警告,实际数据库地址与影子数据库地址不得使用相同配置,否则可能删除数据库中的全部数据。影子数据库在运行过程中会被重置,并重新执行已有的迁移记录。

由于生产数据库被错误指定为影子数据库,Prisma 删除了原有表结构,并重新执行了 116 个迁移文件。数据库的表和字段虽然重新建立,但原有业务数据已不在这些新建的空表中。

随后,Prisma 返回“没有需要生成的迁移”结果。

Claude Code 将这一结果理解为生产数据库与迁移记录完全一致,因此判断数据库状态正常。实际上,两者之所以完全一致,是因为生产数据库刚刚按照这些迁移文件被重新创建。

Claude Code 最终向开发者报告称:“生产环境完全正常,没有进行任何修改,所有操作均为只读。”

当事人随后检查了约 2000 份 Claude Code 本地会话记录,找到执行相关命令的会话。命令运行时间与数据库中第一条重新生成的用户记录相差约 72 秒,由此确认了数据库被重建的时间。

幸运的是,该公司使用的托管 PostgreSQL 数据库支持按时间点恢复。开发者最终将数据库恢复至事故发生约 2.5 小时前的状态,全部数据得以找回,未造成永久性损失。

原贴翻译:

我发出这篇帖子,是因为这种故障方式非常隐蔽。

我认为,即使换成人类开发者,或使用其他 AI 编程工具,也有不少人可能会踩中同一个坑。

事情的背景是这样的,当时,我让一个 AI 编程代理 Claude Code 排查测试环境中的数据库迁移偏移问题。

随后,我又追问了一句:“生产环境也受到影响了吗?”

于是,它开始检查生产环境是否正常。而生产数据库恰恰是我明确不想触碰的唯一一个数据库。

最终摧毁数据库的是下面这条命令:

prisma migrate diff \

--from-migrations ./prisma/migrations \

--to-url "$PROD" \

--shadow-database-url "$PROD" # <-- 这里指向的是生产数据库

不了解 Prisma 工作机制的人,可能很难第一眼看出这条命令为什么如此致命。

当 prisma migrate diff 使用 --from-migrations 参数时,Prisma 必须找一个数据库,实际执行这些迁移文件,从而计算迁移完成后的数据库结构。

这个数据库就是 --shadow-database-url 指定的“影子数据库”。

Prisma 默认认为影子数据库只是一个可以随时丢弃的临时工作区,因此会删除其中原有的数据库结构,再重新执行全部迁移。

Claude Code 将生产数据库地址传给了影子数据库参数,相当于告诉 Prisma:将生产环境作为临时工作区使用。

于是,Prisma 删除了生产数据库的全部表结构,并重新执行了 116 个迁移文件,最终只留下了一批没有业务数据的空表。

最讽刺的是,比较结果随后显示:

This is an empty migration.

也就是“这是一个空迁移”,没有发现任何结构差异。

Claude Code 将其理解为:“生产数据库与最新迁移版本完全一致,运行正常。”

但结果之所以没有差异,是因为生产数据库就在一秒钟前,刚刚按照这些迁移文件被完整删除并重新创建。

Claude Code 最后的回复甚至明确写道:

生产环境完全正常。没有进行任何修改,所有操作均为只读。

事情为什么会发生

坦率地说,原因有以下几点。

第一,“只读”并不是由 migrate diff 这个子命令本身决定的,而是由它搭配的参数决定的。

例如:

migrate diff --from-url ... --to-schema-datamodel

确实是只读操作。

但是:

migrate diff --from-migrations ... --shadow-database-url

并不是只读操作。

两者使用的是同一个 migrate diff 子命令,但实际行为完全不同。

第二,Claude Code 在几分钟前刚刚对测试环境运行过同样的命令,而且表面上看起来“成功了”。

实际上,它当时也悄悄清空了测试数据库。

但测试数据库本来就是一个正在重新构建、状态已经异常的副本,所以这次重置没有被人发现。

第三,生产数据库所有者账号的连接字符串,就放在一个临时 Git 工作目录的 .env 文件中。

它与一次常规命令之间,只隔着一个环境变量。

如何查明事故原因:

Claude Code 会将每一次会话以 JSONL 格式保存在本地磁盘中。

我在大约 2000 份会话记录中搜索具有破坏性的命令特征,最终找到了相关会话。

致命命令的执行时间,与数据库中第一条“重新生成的新用户”记录的出现时间,相差不到 72 秒。

两份相互独立的证据指向了同一个时间点,因此基本锁定了事故原因。

有些荒诞的是,这次数据库清空事件,最后是通过读取 AI 自己留下的操作记录还原出来的。

数据如何恢复:

我们使用的是支持按时间点恢复的托管 PostgreSQL 数据库。

最终,我们将数据库恢复到了事故发生约 2.5 小时前的状态。

数据全部恢复,没有永久丢失。

这也是我的公司今天还能继续存在的全部原因。

这次事故的教训:

--shadow-database-url 指向的数据库,本质上就是一个你已经授权工具随时删除的数据库。

绝对不要将它指向任何真实数据库。

在 Prisma 的迁移工具中,只有 migrate deploy 适合在生产环境中使用。

db push、migrate dev,以及使用 --from-migrations 参数的 migrate diff,都可能执行重置或删除操作。

此外,执行得更彻底,并不等于更安全。

Claude Code 选择了最严格、最权威的验证方式,但恰恰是这种验证方式带来了副作用。

因为在数据库工具中,所谓“权威验证”通常意味着,工具需要在某个地方真正创建和还原数据库状态。

真正的系统性解决方案,并不是“少相信 AI”。

关键在于,不要让生产环境的可写凭据出现在开发人员或 AI 代理可以直接访问的终端环境中。

AI 的自主性只会放大现有权限控制的效果:你设置了哪些安全边界,它就会放大哪些安全边界;你没有设置哪些边界,它也会放大这些缺口。

即使没有 AI,同样的权限隔离措施,也能拦住一名晚上 10 点半因疲劳而误操作的开发者。

欢迎提问。

有需要的话,我也可以公布一份完整的事故分析,包括取证证据,例如 pg_class.reltuples = -1、_prisma_migrations 记录表消失等细节。

云头条声明:如以上内容有误或侵犯到你公司、机构、单位或个人权益,请联系我们说明理由,我们会配合,无条件删除处理。



特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相关推荐
热点推荐
马伊琍称陈龙眼睛凸出、脾气暴躁,疑患甲亢......陈龙当场反驳!

马伊琍称陈龙眼睛凸出、脾气暴躁,疑患甲亢......陈龙当场反驳!

新民周刊
2026-06-27 19:10:21
美永久夏令时渐近?谁能坐收“傍晚红利”,谁在承担“黑暗代价”……

美永久夏令时渐近?谁能坐收“傍晚红利”,谁在承担“黑暗代价”……

财联社
2026-07-16 18:23:04
CCTV5直播法国VS英格兰,开球时间有变,世界杯三四名奖金有多少

CCTV5直播法国VS英格兰,开球时间有变,世界杯三四名奖金有多少

体育大学僧
2026-07-16 10:37:09
如果西班牙夺冠,最尴尬的不是阿根廷,而是以下五位球员

如果西班牙夺冠,最尴尬的不是阿根廷,而是以下五位球员

砚底沉香
2026-07-16 16:10:44
谁来拯救习酒?

谁来拯救习酒?

牛刀财经
2026-07-15 12:51:25
赶紧加油,明晚(7月17日)油价或大涨,今年“涨超5毛/升”的汽柴油,7月再上调,95汽油接近“8元时代”

赶紧加油,明晚(7月17日)油价或大涨,今年“涨超5毛/升”的汽柴油,7月再上调,95汽油接近“8元时代”

油价早知道
2026-07-16 09:48:50
预警!8月极端高温可达...

预警!8月极端高温可达...

i金山
2026-07-16 21:20:13
鬼才导演诺兰《奥德赛》首波口碑:实拍神话巨兽,视觉炸裂

鬼才导演诺兰《奥德赛》首波口碑:实拍神话巨兽,视觉炸裂

自愈小日子
2026-07-16 00:10:04
劳塔罗:英格兰队在前六十分钟持续高位逼抢,之后就体力耗尽

劳塔罗:英格兰队在前六十分钟持续高位逼抢,之后就体力耗尽

懂球帝
2026-07-16 09:34:23
龙凤胎双双上岸!哥哥国防科大妹妹北大,这家人上辈子拯救了银河系?

龙凤胎双双上岸!哥哥国防科大妹妹北大,这家人上辈子拯救了银河系?

优墨出品
2026-07-16 08:37:05
印媒:在“辛杜尔行动”中,布拉莫斯导弹100%命中巴基斯坦全部9个目标,巴总理此后承认

印媒:在“辛杜尔行动”中,布拉莫斯导弹100%命中巴基斯坦全部9个目标,巴总理此后承认

止戈军是我
2026-07-15 08:57:35
一个男人死也不会承认的秘密:他最怕的不是你走掉,不是你变得更优秀,而是你开始用这两种方式回应他,让他全部的手段彻底崩塌

一个男人死也不会承认的秘密:他最怕的不是你走掉,不是你变得更优秀,而是你开始用这两种方式回应他,让他全部的手段彻底崩塌

心理观察局
2026-07-13 06:45:14
14天惨遭“脚踝斩”,两倍做多海力士较高位回撤超70% “事到如今,最对不起的就是家人”,多国语言短袖,道出投资者自责心声

14天惨遭“脚踝斩”,两倍做多海力士较高位回撤超70% “事到如今,最对不起的就是家人”,多国语言短袖,道出投资者自责心声

金融界
2026-07-16 18:05:09
老人最招人烦15条行为,占两条得赶紧改,一条不占备受尊敬和欢迎

老人最招人烦15条行为,占两条得赶紧改,一条不占备受尊敬和欢迎

暖风吹过竹林
2026-06-30 15:04:50
网传今年上海中考有7000个700+,不管你信不信,反正我不信

网传今年上海中考有7000个700+,不管你信不信,反正我不信

金哥说新能源车
2026-07-16 15:52:14
哈佛研究发现:一个家庭最大的远见,小学阶段陪孩子做这7件小事

哈佛研究发现:一个家庭最大的远见,小学阶段陪孩子做这7件小事

户外阿毽
2026-07-14 14:01:15
官方:伊卡尔迪自由身离开加拉塔萨雷

官方:伊卡尔迪自由身离开加拉塔萨雷

懂球帝
2026-07-16 05:13:01
伊朗革命卫队:摧毁了美军科威特空军基地预警雷达系统和一处美军士兵集结场所,特朗普警告:“伊朗最好老实点”

伊朗革命卫队:摧毁了美军科威特空军基地预警雷达系统和一处美军士兵集结场所,特朗普警告:“伊朗最好老实点”

政知新媒体
2026-07-16 13:25:34
亏光2亿只是皮毛,冉莹颖再爆更多猛料,撕下了邹市明仅剩的体面

亏光2亿只是皮毛,冉莹颖再爆更多猛料,撕下了邹市明仅剩的体面

林轻吟
2026-07-10 07:08:11
内贾德没想到,被捕消息传出不足48小时,特朗普突然坐镇战情室

内贾德没想到,被捕消息传出不足48小时,特朗普突然坐镇战情室

阿丰聊娱
2026-07-16 23:21:36
2026-07-17 01:39:00
云头条 incentive-icons
云头条
引领科技变革,连接技术与商业。
20757文章数 27339关注度
往期回顾 全部

科技要闻

苹果AI终于要来了:还能追上华为豆包们吗

头条要闻

扎波罗热核电站总工遭袭身亡 被指或改变俄乌冲突性质

头条要闻

扎波罗热核电站总工遭袭身亡 被指或改变俄乌冲突性质

体育要闻

逆天6后卫神阵,图赫尔活活坑死英格兰

娱乐要闻

天下无不散宴席!白鹿官宣告别欢娱

财经要闻

韩国股市暴涨暴跌 借钱炒股的散户快疯了

汽车要闻

新一代理想L6正式上市 24.98万元 标配高阶智驾/四驱

态度原创

家居
旅游
房产
本地
公开课

家居要闻

2026建博会(广州) 公装联探展交流活动

旅游要闻

云南乡村不起眼水塘,藏全国独一份纪录,340 年前徐霞客专程奔赴

房产要闻

洞察新局 | 2026年海珠置业红盘图鉴

本地新闻

人生必去清单:那达慕大会开嗨!

公开课

李玫瑾:为什么性格比能力更重要?

无障碍浏览 进入关怀版