七成运维事故,根子在权限管不好。这话不是我说的,是很多一线DBA和运维老炮儿的共识。他们亲眼见过、亲手处理过那种因为一个权限漏洞,整个数据库被拖垮的惨案。比如,有人图省事,所有开发人员都配了root权限,结果一个实习生误操作,把生产环境的核心表清空了。这种事,每年都得上演好几次,而且每次复盘,原因都绕不开权限管控这个坎儿。

为啥权限容易出问题?说白了,是“方便”和“安全”打架。开发、测试、运维,每个人都想要最宽松的权限,觉得这样干活快。但数据库是个精细活,一个表、一条命令,甚至一个字段的误操作,都可能引发连锁反应。很多公司一开始都抱着“先跑起来再说”的心态,权限给得粗放,等系统跑起来了,业务复杂了,想回头收紧权限,发现已经积重难返。这就好比一间乱糟糟的屋子,你越堆东西越难收拾,想找个钥匙都翻得满头大汗。
权限管控的另一个大坑,是“权限蔓延”。一个人刚进公司,给了基础权限;干得好,慢慢加权限;干得久,权限越积越多。离职时,系统里还挂着几十个账号,每个都有一堆用不上的权限。这些“僵尸权限”就是定时炸弹。有次某公司做安全审计,发现一个离职三年的同事账号,居然还能登录数据库,而且权限是“管理员”。审计的人当场吓出一身冷汗,赶紧清退了。这种事儿,不是个例,是通病。
再往深了说,权限管控不光是技术问题,更是管理问题。很多公司只盯着“谁有权限”,却不管“权限怎么用”。比如,有人拿着SELECT权限,但写了个超长SQL把数据库拖死;有人只有INSERT权限,但批量插入数据把磁盘撑爆。权限本身没错,错的是没有配套的监控和行为审计。你给了权限,就得知道他在用权限干什么。否则,就像把车钥匙给了一个小孩,你只说了“别乱开”,却没装个行车记录仪和限速器。
实际操作中,很多团队还在用“一刀切”的权限策略。要么全给,要么全不给。开发环境、测试环境、生产环境,权限配置一模一样。这等于把生产环境的命门,直接暴露给所有开发人员。有次我去一家公司调研,发现他们的测试库和生产库共用一套账号体系,连密码都一样。我问他们为什么,回答是“方便管理”。结果呢?上线前一个测试脚本,直接删了生产库的表。事后追责,所有人都说是“意外”,但意外背后,是权限管控的系统性失灵。
权限管控还有个容易被忽略的点:临时权限。比如,线上出了紧急故障,需要DBA临时授权给某个开发去查日志或修复数据。这个临时权限,常常因为后续没人撤销,就变成了永久权限。久而久之,系统里积累了成堆的“临时”账号和“临时”权限。安全审计时一查,全是漏洞。更麻烦的是,这些临时权限往往没有审批流程,也没有操作记录,出了问题根本没法回溯。
要解决这些问题,其实核心就四件事:最小权限原则、定期权限审计、行为监控和自动化授权。最小权限原则,就是给每个人只配他干活必须的那点权限,多一分都不给。定期审计,就是每隔三个月,把所有账号和权限拉出来过一遍,该清退的清退。行为监控,就是记录每个操作,谁、什么时候、干了什么,全部留痕。自动化授权,就是通过审批流程,让权限申请、审批、下放、回收全流程自动化,减少人工干预的漏洞。
说到底,数据库权限管控不是一道技术题,而是一道管理题。工具和流程再完善,如果人不去执行,不去遵守,那都是白搭。七成运维事故由权限不当引发,这个数字不是吓唬人的,是血淋淋的教训堆出来的。真正想把权限管好,要从意识上把“权限”当回事,从制度上把“权限”管起来,从技术上把“权限”锁住。只有这样,才能把事故率压下来,让运维团队从“救火队”变成“防火队”。


