摘要:自从发生了数据库安全事件之后,我一直很重视mysql的访问权限控制,仅允许必须的服务器来连接数据库,没有用的IP都屏蔽掉了。
数据库安全的那点事儿, 可能是每个DBA都会遇到的问题, 同时也是最容易忽略的事。因为大多数开发团队都将精力放在了功能的实现上,很少去考虑安全相关的事儿,这也就给了黑客可乘之机。
我最初在一家小型BBS社区工作,主要是管理BBS的数据库系统。这家公司人数不多,主营业务在行业内竞争比较激烈。我还清晰的记得,某天中午正在吃饭,就被叫回公司,同事焦急地说:“我们可能被黑了,所有BBS注册用户的金币都多了10倍。”这意味着凭空而来的金币会导致社区用户对人民币充值的热情降低,直接影响公司的收入。
我首先想到的是有人入侵了数据库修改了数据,所以仔细的查了一下数据库的情况,看有没有留下一点痕迹。其实对于一个刚工作不久的DBA来说,我的经验不多,遇到问题还是有些措手不及。在忙乱中折腾了1个多小时,最后我终于想到了mysql的查询日志(query log),仔细查看这个日志,发现从10.10.1.23这个IP发过来这样一条sql语句:update account set jinbi=jinbi*10。对了!就是它了,正是这个sql语句导致了所有BBS用户的金币都多了10倍。接下来我检查了10.10.1.23这个IP,这台机器其实是一台备机,还没有启用,所以操作系统安全等方面做的不够全面,黑客正是通过这台机器来操作数据库的。同时我又检查了一下mysql的权限,其中主机IP写的是10.10.*,写的是一个段的IP,正是因为这个设置,导致了黑客使用了有漏洞的机器来进行修改数据库的操作。
这个案例深刻的告诉我mysql的权限控制有多重要。如果当时mysql的访问权限将IP设置为只允许应用服务器来连接的话,也不会出现这样的后果,所以今后的这几年我都很重视mysql的访问权限控制,仅允许必须的服务器来连接数据库,没有用的IP都屏蔽掉了。另外,就是query log的重要性,因为它记录了所有尝试连接mysql的请求,如果某个IP不停的发出连接请求,并且总是用户名和密码错误,那么DBA就应该重视了,这样的操作很有可能就是黑客在尝试猜测mysql密码,这也是很危险的,应该及时采取措施来应对。
总之,安全无小事,一定要引起重视,同时要有良好的安全意识,因为良好的习惯是工作顺利进行的保证。
启明星辰公司数据库审计专家点评
该案例非常生动,对于数据库事件的排查分析过程也很细致。所采取的安全措施除了访问控制外,还有数据库日志,这对一个DBA来说难能可贵。如果担心开启数据库日志带来的性能下降,也可考虑第三方审计产品。目前主流审计产品除了具备审计能力外,还具备异常行为分析和监控、权限管理等功能,甚至可以做访问控制和违规阻断,可协助安全管理人员做到数据库访问的事中防护和事后审计。