专栏 | 九章算法

网址 | www.jiuzhang.com

上周我与同事们进行了一次关于职业生涯中搞砸了一些事情的简短谈话。这确实会沦为他人笑柄,却更给我们带来了珍贵的教训。重要的是,我们应该分享那些曾经的错误,这样其他人就可以从其中学习。下文是最近在我身上发生的例子。

1.为什么有如此多误删生产数据库的事情发生?

几个月前,Reddit上有一篇文章,讲了一名初级开发人员在上班的第一天就删除了生产数据库的事。我们都很憷于读到这类犯了这类无法让人忘却的大错误的文章。因为我们离这些也不远,而大多数人都是“死里逃生”。

在我的第一份工作中,一位高级数据库管理员在上班第一天就误删了生产数据库。这类故事情节比比皆是。这个团队从一个星期的备份中恢复了他导致的错误,并让他继续工作。十年后,他们依然将其作为笑点。

今年早些时候,我被派去检查一个客户的生产数据上的问题。他们进行了小范围的非公开测试,结果网站上没有显示任何内容。我想查查是否是存在漏洞或是易损性问题导致了这一结果。

我通过了生产机器上的签名环节,然后打开了数据库。内容库(articles table)内空空如也。这证实了我们在网站上看到的情况是真实的。

用户库(users table)内依然有用户数据存在。真让人奇怪。所以情况是我们丢失了所有内容,但是至少测试用户的信息依然存在。我们给出的解释是这是一个测试行为,所以这些事情有可能发生。

接下来的几分钟一片混乱。我不记得自己做了什么。我不认为自己笨到在控制台上执行了删除用户库的操作。但是事实就是这么发生了,现在后台既没有了内容库,也没有了用户库。这真实下了我一大跳。

然后我的大脑就开始转动起来思考如何解决这个问题。我真的把用户库给删掉了吗?是的。我们存备份了吗?没有。我们应该如何告诉客户这个事情?不知道。

我犹记得自己走向项目经理那里,坐在她身边,向她解释了发生了什么事情时的场面。因为我们的内容库中没有内容,这就是为什么网站上空空如也的原因。同时,我还删除了用户库。他们现在需要重新邀请所有的用户,如果他们能够弄清楚谁是谁。

我回到了自己的办公室,垂头丧气。

不过,我还是没有接受这件事。我们一开始是如何失去这些东西的?

我开始不停地往深处想。半是为了否认这件事,半是想要挽回面子。不久,我注意到了一些重要事情。

在服务器上还存在着其他5个数据库。其中一个数据库的名字和我刚才看到的数据库名字很像。

当我查看这个数据库的时候,发现所有的内容都在里面。用户库也安然无恙。结果证明,是一个配置变动无意中改变了生产设置,使站点指向了一个全新的数据库。我之前所看的用户信息是什么?种子数据。

真是谢天谢地。早上的神经紧张和胃酸让我觉得很不舒服,但是我们“恢复”了数据,并在坏消息传开之前找到了真正的问题。

从这件事中可以吸取很多教训。其中一点是关于最简单原则:我们总是在做的备份,也许是开发人员最有成效的挽救药。

2.继续前进但不要冲得过前

我最近犯的一个错误不太引人注目。事实上,这是一个经由小错误所引起的小错误最终导致了一场混乱的故事。

我们面临的是一个时间紧迫的项目。

在初次会议上,我们团队一致认为完成它会花费比预定时间多一倍的时间。这个最后期限一开始就对我们产生影响,让我宽松地通过了身份认证部分而留有更多时间去关注客户所实际关注的功能设计。

我只是在一个单一页面测试了身份验证测试,但是当时还不了解它们将如何被组合在一起。

把它单列出来是我做的一个错误决定。我忽略了一些重要事情:

用户在登陆之后会从cookie中加载内容,但是这个页面却试图在没有任何等待的情况下进行加载。根据事件的发生顺序,用户会得到带来服务器的反映,说其是未经授权的。身份验证也未检查令牌是否过期。如果用户不经常访问这个网站。那么当其再一次访问时,网站需要用户登出再登入才会运行。令牌应该基于每个请求进行更新,但是我从未花费时间去理解其发生前后的规则。所以,这又产生了一个时间问题。如果我们同时发送了几个请求,根据它们返回的顺序,用户会得到那个在后来的请求中无法使用的令牌。
复制代码

我们匆匆忙忙地赶着项目,却仍花费了比规定多一倍的时间。区别之处在于有更多的漏洞,并需要花更多时间去跟踪并修复这些漏洞。

这使我感到窘迫。之后因为整件事情变得比较糟糕哦而让我在公众场合感到羞愧。

我想说的是:在此之后,我花费了时间去学习认证程序。我现在了解了OAuth、JWT、刷新令牌和到期行为。我仔细研究了其他人所编写的身份验证代码。我能够在不同的语言和框架中建构身份验证程序。

3.将失败转化为未来的成功

这是我从那些表现糟糕的事情中所获得的经验。如果你愿意,那么几乎所有好的结果都会由此而来。

如果有人能从自己的错误中汲取教训,那么他就会比现在更优秀。我试着不去打击那些第一次犯错误的队友。他们通常都知道自己把事情搞的一团糟。

我也正尝试不对那些不断犯同样错误的人施加压力。他们仍然值得同情。

如果在错误中做到这4点,那么你就会不断成长:

  • 嘲笑自己。

  • 从中汲取经验教训。

  • 改正错误。

  • 分享自己的错误,让其他人也有所收获。

最后,我想讲一个关于错误价值的轶事。20世纪初,IBM的首席执行官托马斯·J·沃森曾遇到过一名员工,这名员工的一系列糟糕决策让公司付出了巨大代价。当沃森被问到是否会解雇这名员工时,他回应道:

“不,我刚在他身上花了60万美元的培训费。为什么要让别人白白捡去这个便宜?”

-THE END-

欢迎关注我的微信公众号:九章算法(ninechapter)。
精英程序员交流社区,定期发布面试题、面试技巧、求职信息等

误删了公司数据库,但我还是活下来了相关推荐

  1. 如何基于OceanBase构建应用和数据库的异地多活

    如何基于OceanBase构建应用和数据库的异地多活 前言 OceanBase是一个通用的分布式的关系型数据库,有很多独特的特点.比如数据库的多租户.高可用.极致弹性伸缩能力.如果把OceanBase ...

  2. 从删库到跑路,就是这么迅速!程序员为了报复同事删了公司数据库

    从删库到跑路,就是这么迅速!程序员为了报复同事删了公司数据库 一只有头发的程序猿 2019-08-23 09:38 做过互联网行业的都知道,数据库对公司是至关重要的,存储了大量的数据在里面,要是没有这 ...

  3. 记一次在家办公远程公司数据库的解决方案

    记一次在家办公远程公司数据库的解决方案 参考文章: (1)记一次在家办公远程公司数据库的解决方案 (2)https://www.cnblogs.com/jkguo/p/11188706.html 备忘 ...

  4. 使用 SQL 创建公司数据库的最快方法

    公司有自己的数据库,其中包括他们的销售人数.员工人数.客户人数等.企业和其他组织使用 SQL 程序来访问和操作数据库中的信息和数据,以及创建和更改新表. 在这里,我们将学习如何使用 MySQL 模式创 ...

  5. XX公司数据库迁移项目可行性研究与风险评估

    XX公司数据库迁移项目可行性研究与风险评估 请尊重知识,请尊重原创 更多资料参考请见  http://www.cezuwang.com/listFilm?page=1&areaId=906&a ...

  6. 公司数据库使用的是sqlServer 以防万一留着 SQLsever误删数据恢复

    SQLsever误删数据恢复 ​ 创建存储过程 语句如下 -- Script Name: Recover_Deleted_Data_Proc – Script Type : Recovery Proc ...

  7. 工程师误删了公司生产数据库,如何看待数据安全架构的脆弱性?

    01 背景 这个事情发生在两年前,是某丰的工程师,根据网上披露的信息,大体情况是这样:首先工程师接到了需求变更的任务工单,需要进行数据库SQL执行操作,并事先准备好了SQL的脚本.接下来通过登陆跳板机 ...

  8. 为什么oracle依旧是很多大公司数据库首选?

    为什么大部分公司的数据库系统仍然要用Oracle?我认为Oracle之所以能占有这么大的市场份额,是因为其在海量数据的处理上更具有优势,并且能提供一整套的数据存储解决方案. 在一些非常大的企业里,这些 ...

  9. 震惊!680万用户信息泄露,国内某人脸识别公司数据库“裸奔”

    华盟君报道,据某404网站,以及微博安全应急响应中心消息,国内某人脸识别公司发生大规模数据泄露事件.超过250万人的数据可被获取,680万条记录泄露,其中包括身份证信息,人脸识别图像及捕捉地点等. 据 ...

最新文章

  1. 初中参观机器人博物馆的作文_2021考研英语二大作文模板整理
  2. AI如何设计,才能人类利益最大化?
  3. altium designer 去掉原理图右下角的标签栏
  4. SIM900A基站定位调试笔记 -转
  5. Java的call by value_call by value or reference ?
  6. 【若依(ruoyi)】swagger 接口 @ApiModelProperty 添加枚举值说明
  7. mysql sum计算效率很慢_MySQL基础之分组函数
  8. python 自动补全
  9. 利用Unity实现AOP
  10. 后缀的形容词_玩转英语词汇-词汇策略之形容词后缀
  11. 快速实现word、excel、ppt、txt等办公文件在线预览功能(Java版)
  12. js define函数_不夸张,这真的是前端圈宝藏书!360前端工程师Vue.js源码解析
  13. Ubuntu安装最新版nodejs
  14. 将图片转换为Base64编码字符串、解析Base64编码字符串后生成图片
  15. js去掉字符串第一位和最后一位
  16. 中医卫统直报、重点专科、绩效考核病案首页字段汇总-标出差异
  17. 分享几个关于geoJson的网站(乡镇级地图绘制)
  18. 使用正则表达式进行身份证号匹配
  19. 单片机中的上电复位 和手动复位
  20. ThinkPad物理机安装Linux系统实战企业级项目之CentOS安装

热门文章

  1. oracle数据库相关知识,Oracle数据库相关知识点复习
  2. 较简单的字节输入流输出流拷贝文件
  3. C++:47---绝不重新定义继承而来的缺省参数值
  4. C++(8)--数组及常用算法
  5. 《Python Cookbook 3rd》笔记(1.7):字典排序
  6. C++primer第十章 泛型算法 10.1 概述 10.2 初识泛型算法
  7. 搭建基于飞桨的OCR工具库,总模型仅8.6M的超轻量级中文OCR,单模型支持中英文数字组合识别、竖排文本识别、长文本识别的PaddleOCR
  8. java 输出三位数和n位数的每一位的数
  9. JVM的几点性能优化
  10. 今时今日,C还适合当下之所需么?