一个程序员在公司没有数据库权限意味着什么?
▍├一个程序员在公司没有数据库权限意味着什么?
谢邀!
给你讲个鲜活的、亲身经历的、下场极其惨烈的,真实生产环境数据库被破坏的例子,你就懂了。
2015年的时候,我负责江苏省一个农用机械设备制造龙头企业的数据库运维服务,该企业的ERP、MES、CRM、OA、进出库、进销存,等等13套系统的数据库都在我的服务范围内,日常工作就是定期巡检、性能优化、数据库备份、灾备演练。
那年5月份,我的邮箱和手机几乎同一个时刻被报警信息轰炸了,而几分钟后客户来电,接通后客户带着哭腔喊道:救命啊,要命了,全宕机了,出大事了。
我让客户冷静下来,简单询问发生什么事情了,客户颤抖着勉强把事情讲了个大概,我拼凑着听明白了:
研发部门最近做客制化功能开发,在那天的一次测试中,把数据源选错了,本来应该选开发测试DEV&QAS的数据库,他鬼使神差得选择了生产环境PRD数据库,好死不死,这个测试要重建schema,意思是要DROP USER CASCADE 后重新创建USER和USER下的数据库对象,传说中的删库。
一条命令下去,据客户给我说,瞬间全停了,车间所有流水线所有机械臂都停了,邮箱被各种报警轰炸邮件轰炸,5分钟内逐级上报到了集团CTO。现在所有工人都在车间闲着聊大天,原料到了入不了库都堆在仓库大门口,出租出去的机器在大屏上也看不到了,客户也付不了款,集团现在生死存亡了。那个惹祸的研发吓瘫了,真正地瘫了,就躺着地上起不来,全身都是软的。
我立刻远程VPN登录客户堡垒机,做一个宏观的检查和判断,定位问题,确定灾难等级,确定恢复方案。因为是直接DROP USER的,这个命令直接同步到了异地数据中心的灾备数据库,也就是灾备中心现在也不能用了。做备份还原吧,凌晨的备份是没问题的,果断跟客户讲了恢复方案,客户说要跟CTO汇报下,得到同意才能搞。我说:好,立刻,赶紧,不要犹豫。
半小时后,客户CTO回电,就一个问题:有救吗?
我肯定地告诉客户CTO:放心,有我。
CTO挂掉电话,给我发了一封邮件,抄送了集团IT全部人员、公司副总,意思简单明了:灾难恢复,还原数据库,停产一天,明天9点恢复生产。
他甚至都没问我需要多久,就拍板了明天9天恢复生产,我想这也许是他的级别能决定的最高时限了吧。
结果,我在当晚凌晨3点多完成了数据库灾难恢复,第二天太阳照常升起,生产依次有秩序地恢复了正常。
那个搞出这次事故的研发,一周后辞掉了工作,走的时候依然精神恍惚,这种事谁也不想发生的,既然发生了,只能尽力挽救,希望他能放下心结,面对今后的生活。
而我也在反思,很多企业在最开始搞信息化的时候粗犷大条,不够严谨,生产与开发牵连甚多,盘根错节,往往就是导致类似灾难的根本原因。
后来时过境迁,大家再聊起来这个事情,我才知道,CTO扣除了当年绩效奖金,降薪一级。副总扣除了当年奖金。全部研发员工扣除当年绩效奖金。那一次故障,集团损失400万。
正规合规的企业,研发部门都是没有正式生产环境数据库的访问权限的,这个访问不仅是写,包括读。
▍≌一个程序员在公司没有数据库权限意味着什么?
权限越高,责任也越大。没有正式环境的数据库恰恰是保护了自己,防止自己不小心犯错给公司或者客户造成不必要的损失。
还记得之前有个运维就是用了自己写的一个小工具,连上了客户正式环境数据库,执行了锁表操作,导致医院系统无法正常使用,造成重大损失,自己也因此承担相应的法律责任。
作为程序员来说不见得非要保存正式环境的相关信息,虽然说方便,但是很容易测试正式不分,导致误操作。到时候别为了解决一个bug,丢了一个大西瓜,得不偿失。职场上你做了多少贡献,加了多少班,领导不一定会认可,但是造成了重大损失,你的责任跑不了。
所以即使解决某个问题,使用了正式的账户,用完之后也要清理掉正式信息,不要给自己留下隐患。
996的同时也要记得保护好自己,不要面向监狱编程
▍ツ一个程序员在公司没有数据库权限意味着什么?
一般开发人员是不允许拥有数据库操作权限的。因为软件是你开发的,一旦给了你数据库权限,增加了系统数据的泄露篡改的风险。正规的公司一般会有专门的DBA团队来负责维护数据库环境。如果生产开发需要,程序员要获取线上的数据,需要提交工单到DBA团队获取临时权限。
这样的好处:
保证了职责单一、各司其职。保证了隔离了权限,避免潜在的安全风险。规范了数据的工作流程。数据作为当今互联网、IT行业的核心资产,必须得到重视。不合规的管理流程必然导致各种安全风险,很多小公司开发兼任DBA的职责,我就遇到一个开发离职后使用原公司的数据库连接篡改数据牟利,造成了重大的损失。也遇到不专业的数据库管理造成数据库被拖库、被黑客锁表勒索。所以一定要重视数据库的管理,权限尽量保证合规性。
▍≒一个程序员在公司没有数据库权限意味着什么?
数据库分环境的,1生产库,2测试库,3开发库,4本地库。
1生产库的管理权只在运维,全体开发无任何权限(版本升级提供脚本升级数据库),原则是动技术的不碰生产数据,碰数据的不懂业务和技术;
2测试库管理权限在运维和测试人员,开发无权限,提供升级版本给测试(或者运维);
3开发库权限在运维和项目经理,开发人员提供脚本升级;
4本地库是开发人员本机数据库,自己随便玩。
综上,如果是生产测试库,开发无权限很正常,说明管理到位
▍❧一个程序员在公司没有数据库权限意味着什么?
这才是正常的。在公司里,都只会有高级别的一个或几个以及DBA才有数据库权限。
如果是你工作的项目需要访问db,才会给你分配某个数据库的权限,往往是只读,需要其他权限需要额外申请。
数据是公司业务的基石,要是谁都可以上去操作一把,那就乱套了。万一被删除了被篡改了被窃取了呢,而且公司也有义务保护好客户的资料。
------------------
推荐阅读:
上一篇:面试官最鄙视什么样的应聘者?