2024年10月底,某金融机构因数据库默认账户未修改密码,导致客户数据泄露,被监管罚款数百万元。同时,多家云服务商近期开始强制推行多因素认证和定期密码轮换策略。
管理好数据库的账号和密码,就像管好你家大门的钥匙。钥匙乱放,谁都能进;密码没管好,数据就危险了。这不仅是为了防坏人,也是为了自己工作起来更顺心,别整天为忘了密码或者谁该有权限而头疼。
给每个“人”发专门的钥匙,别共用
很多人图省事,让好几个应用或者好几个运维同事都用同一个管理员账号登录数据库。这就像全家人共用一把大门钥匙,丢了都不知道是谁弄丢的,出了问题也没法追查。正确的方法是,给每一个需要连接数据库的应用程序单独创建一个账号,只给它完成工作所必需的最小的权限。比如,一个只负责生成报表的程序,就只给它读数据的权限,千万别给它能删库的权限。同样,给每一位运维或开发同事也建立他们个人专属的账号。这样一来,数据库里做的任何操作,日志里都能清清楚楚地记录下是“谁”干的,责任分明,出了事也能快速找到源头。
把密码变得又长又乱,并且定时更换
密码不能太简单,像“123456”、“admin”这种,一猜就中。好的密码应该是一长串毫无规律的字符,混合大小写字母、数字和符号,越长越好,最好超过12位。自己记不住没关系,可以用专业的密码管理工具来帮你生成和保存这些复杂的密码。另外,密码不能一成不变。要设定一个规矩,比如每90天或者每半年,就必须更换一次重要账号的密码。这就像定期给锁芯换新钥匙,即使旧的钥匙不小心流出去了,过段时间也就失效了。换密码的时候要注意,新旧密码不能太像,最好是全新的一套。
给大门加装第二把锁(双因子认证)
光是靠密码这一把“钥匙”已经不够安全了。现在更可靠的做法是启用“双因子认证”。意思是,进入数据库除了需要输入密码(你知道的东西),还需要第二种验证方式,比如你的手机收到的动态验证码(你有的东西),或者你的指纹(你身上的特征)。这样,即使密码不小心被泄露了,坏人也因为没有你的手机或指纹而进不来。虽然设置起来多了一步,但对于那些最高权限的管理员账号,加上这第二把锁是非常值得的投资。
别把密码明文写在程序里
一个特别常见又危险的习惯是,直接把数据库的密码明文写在应用程序的配置文件或者代码里。一旦这个代码文件泄露,密码就直接暴露了。应该使用更安全的方式来处理。比如,可以利用云平台或运维工具提供的“秘密信息管理”服务,把密码存在一个专门的安全保险柜里。程序运行时,再去向这个保险柜申请获取密码,这样密码本身就不会出现在明文代码中。也可以使用一种叫“连接池”的技术,由它来统一管理连接和认证,避免在每个地方都硬编码密码。
用工具来管,别靠人脑记
账号多了,密码又复杂又要常换,光靠Excel表格或者脑子记根本不行,而且容易出错。应该引入一套账号密码管理的流程或工具。这套工具能帮你自动生成复杂密码、安全地存储密码、控制谁能访问哪个密码,并且能自动执行定期更换密码的任务。它还能记录所有对密码的查看和操作,形成审计日志。这样一来,运维人员不用再死记硬背一大堆密码,只需要通过一个安全的门户去申请临时权限即可,既方便又安全。
参考来源:中国国家互联网应急中心(CNCERT)《2024年上半年网络安全报告》中关于数据库安全威胁的章节;亚马逊AWS官方文档中关于IAM角色和Secrets Manager的最佳实践指南;以及行业常见标准《信息安全技术 网络安全等级保护基本要求》中对身份鉴别和访问控制的相关条款。