
码个蛋(codeegg) 第 898 次推文
删库跑路,再现江湖!
程序员与数据的相爱相杀,常常终结于删库。虽然历来删库事故里大多以误操作为主,但零星发生的个别案例,常常令老板深夜惊醒。不知道大家还记不记得去年:游戏公司主程锁库事件?

而近日,上海微盟公司再次发生核心运维人员删库跑路的桥段。据公告称:2月23日18时56分,运维人员贺某因个人精神等原因,通过VPN登入公司内网对生产环境进行破坏。

虽然事后,公司迅速与腾讯云合作进行了数据恢复,但36小时内足够对公司产生重大影响已经发生,对用户的影响更是深远。不同于以往删库事件的小公司,这次的主角竟然是腾讯投资的港股上市公司!
微盟成立于2013年4月,现有员工超3200人,渠道代理商超1600家,注册商户超300万。
微盟是中国中小企业云端商业及营销解决方案提供商,主要提供零售、广告等线上业务的 SaaS 服务,也是腾讯社交网络服务平台中小企业精准营销服务提供商。事故发生后,恰恰瓜子、自然堂、卡宾等客户商家小程序电商均处于无法打开的状态。
删库一时爽,铁窗望月光
不论与公司发生了什么样的冲突,恶意破坏不仅不能解决问题,而且会激化矛盾,更给个人及公司带来深重的灾难。更何况这种行为是严重的违法犯罪行为。码仔为大家再敲一次警钟吧。
第二百八十六条 违反国家规定,对计算机信息系统功能进行删除、修改、增加、干扰,造成计算机信息系统不能正常运行,后果严重的,处五年以下有期徒刑或者拘役;后果特别严重的,处五年以上有期徒刑。违反国家规定,对计算机信息系统中存储、处理或者传输的数据和应用程序进行删除、修改、增加的操作,后果严重的,依照前款的规定处罚。故意制作、传播计算机病毒等破坏性程序,影响计算机系统正常运行,后果严重的,依照第一款的规定处罚。
《中华人民共和国刑法》
删库跑路的行为主要犯了《刑法》里面的“破坏计算机信息系统罪”,而有达到以下行为之一的就构成“后果严重”:
-
(一)造成十台以上计算机信息系统的主要软件或者硬件不能正常运行的;
-
(二)对二十台以上计算机信息系统中存储、处理或者传输的数据进行删除、修改、增加操作的;
-
(三)违法所得五千元以上或者造成经济损失一万元以上的;
-
(四)造成为一百台以上计算机信息系统提供域名解析、身份认证、计费等基础服务或者为一万以上用户提供服务的计算机信息系统不能正常运行累计一小时以上的;
-
(五)造成其他严重后果的

刑法警告,请勿模仿
加强管理,未雨绸缪
做为像大家这么优秀的程序员,肯定已经动力“改变世界”的心思。对啊,一幕幕血淋淋的悲剧,不能再发生。而我们可以从管理和技术两个方面进行改进。
科学管理
账号分离,避免写错命令。例如:给业务开发同学 DML 权限,而不给 truncate/drop 权限;如果业务开发人员有 DDL 需求的话,可以通过开发管理系统得到支持;即使是 DBA 团队成员,日常也都规定只使用只读账号,必要的时候才使用有更新权限的账号。
制定操作规范,避免写错要删除的表名。在删除数据表之前,必须先对表做改名操作。然后,观察一段时间,确保对业务无影响以后再删除这张表;改表名的时候,要求给表名加固定的后缀(比如加 _to_be_deleted),然后删除表的动作必须通过管理系统执行。并且,管理系删除表的时候,只能删除固定后缀的表。
技术预防
说起预防,我们不得不说起死亡命令“rm”:
rm -rf
rm 是 Linux 系统下删除文件的命令,-r 代表删除这个下面的一切,一切的一切那种的一切。f 表示不需要用户确认,直接执行。
如果后面的文件夹路径没有加对,rm -rf 在服务器上也就意味着…解脱了......

方案一:重定向 rm 命令嫁接为 mv 命令,相当于给 Linux 系统定制了一个回收站。
# 定义回收站目录trash_path= '~/.trash'# 判断 $trash_path 定义的文件是否存在,如果不存在,那么就创建 $trash_path.if[ ! -d $trash_path ]; thenmkdir -p $trash_pathfi# 定义别名:使用 rm 就调用 trashaliasrm=trash# 使用 rl 就调用 'ls ~/.trash'# 如果更改上面的回收站目录这里的目录也需要修改aliasrl= 'ls ~/.trash'# 使用 unrm 就调用 restorefile,需要在删除目录的父目录下执行aliasunrm=restorefile# 使用 rmtrash 就调用 claearteashaliasrmtrash=cleartrash# 恢复文件的函数restorefile(){mv -i ~ /.trash/$@ ./}# 删除文件的函数trash(){mv $@ ~ /.trash/}# 清空回收站的函数cleartrash(){read -p "确定要清空回收站吗?[y/n]"confirm[ $confirm == 'y'] ||[ $confirm == 'Y'] && /bin/rm-rf ~ /.trash/*}
将上述脚本写入 /etc/bashrc,并立即执行命令 source /etc/bashrc 即刻生效。
方案二:向大家提推荐一个开源项目:trash-cli,1.4K Star 还是有部分用户的。它呢,类似垃圾桶机制,可以恢复文件。
https://github.com/andreafrancia/trash-cli

最后,祝每个程序员都被善良以待。
参考文章:https://www.sohu.com/a/292017569_355140
https://www.cnblogs.com/asdf89/p/9699665.html
相关文章:
今日问题:
大家第一次想删库跑路是什么时候?
专属升级社区:《这件事情,我终于想明白了》

