返回档案库

案例库 · 软件与 IT · 运营决策 · 2017

GitLab 删掉了自己的生产数据库,然后眼看着五层备份全部失效

一名疲惫的工程师删掉了主服务器上的数据目录,而不是备用服务器上的。结果每一套备份机制不是坏了、旧了,就是空的。

GitLab · 2017-05-18

怎么回事

2017 年 5 月 18 日,一名 GitLab 员工试图删除本地开发环境里的一个测试数据库。由于一个复制粘贴错误和一个配置错误的 SSH 会话,他对正在运行的生产 PostgreSQL 实例执行了 `drop database` 命令。几秒钟内,430 GB 用户数据——包括代码仓库、议题和合并请求——被永久抹除。

公司的灾难恢复计划依赖五个不同的备份层:每日快照、持续复制、异地归档,以及其他。在一场灾难性的连环失效中,每一层都被证明已损坏或不完整。最近一份可靠备份是四天前的,意味着数千名用户三天的工作消失得无影无踪。

前所未有地,首席技术官席德·西布兰迪在 Twitch 上直播了六个多小时的恢复过程。工程师通宵工作,从缓存的 API 响应、浏览器历史,以及用户 fork 了项目的 GitHub 镜像里,手动重建数据。虽然大部分被找回,这一事件暴露了公司管理自身基础设施时的严重脆弱。

为什么会这样

  • 没有任何技术护栏能阻止单个用户删掉生产数据库;权限太宽。
  • 所有自动备份系统都藏着损坏或缺口,在最需要的时候毫无用处。
  • 这名工程师缺乏针对生产访问规程的专门训练,靠的是本地开发养成的肌肉记忆。
  • 文化上对速度和信任的强调,绕过了标准的变更管理审查步骤。
代价6 小时的数据·18 小时宕机,全程直播代价高昂

教训

信任不是安全策略。要用技术手段 (比如权限分级) 把「误删」变成做不到的事,而不是指望人不出错。

后来呢

GitLab 实施了严格的基于角色的访问控制 (RBAC),把生产访问与开发环境分开,并彻底改革了备份验证流程,确保备份在被信任之前确实可以恢复。

资料来源

发现哪里写错了?告诉我们。

Comments · 0

    登录 后就能评论。

    类似的案例

    这家公司栽倒的地方,别处有人漂亮地解开过。 第二意见 →