数据库安全的那点事儿,可能是每个DBA都会遇到的问题, 同时也是最容易忽略的事。因为大多数开发团队都将精力放在了功能的实现上,很少去想安全相关的事儿,这也就给黑客以可乘之机。
回忆刚工作不久时,在一家小型BBS社区工作,主要是管理BBS的数据库系统。这家公司人数不多,主营业务在行业内竞争比较激烈。我还清晰的记得,是当天中午正在吃饭,就被公司叫回公司,同事说“我们可能被黑了,所有BBS注册用户的金币都多了10倍”,这其实意味着凭空而来的金币会导致社区里人民币充值的热情降低,直接影响公司的收入。
我当时首先想到的是有人入侵了数据库修改了数据,所以仔细的查了一下数据库的情况,看有没有留下一点痕迹。其实对于一个刚工作不久的DBA来说,经验不多,遇到问题有些措手不及,各种瞎找,各种瞎试,折腾了1个多小时,最后终于想到了mysql的查询日志(query log),仔细查看了这个日志,后来发现从10.10.1.23这个IP发过来这样一条sql语句“update account setjinbi=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密码,这也是很危险的,应该及时采取措施来应对。
总之,安全无小事,一定要引起重视,同时要有良好的安全意识,因为良好的习惯是工作顺利进行的保证。