数据库如何防止被攻击
公司官网突然打不开,客服电话被打爆,一查日志发现用户数据全被拖走了——这种事不是电影情节,而是真实发生过的安全事故。数据库作为信息核心,一旦被攻破,损失远不止服务器宕机那么简单。在系统设置环节就做好防护,才是硬道理。
限制访问来源,别让谁都连得上
很多数据库默认允许任意IP连接,这等于把家门钥匙挂在网上。正确的做法是,在防火墙和数据库配置中双重限制IP范围。比如MySQL可以通过修改my.cnf文件绑定内网IP:
bind-address = 192.168.1.100同时配合iptables规则,只放行应用服务器的IP地址,其他请求一律拦截。就像小区只允许登记过的住户进出,陌生人根本摸不到楼道门。
权限最小化原则,别随便给管理员账号
开发人员习惯用root账号跑程序,图省事却埋下大雷。一旦Web层被注入,攻击者就能顺手清空整个库。应该为每个应用创建独立账号,并严格限定操作权限。例如只读业务就只能SELECT:
GRANT SELECT ON shop.orders TO 'web_user'@'192.168.1.%';就连备份脚本也该用专用账户,避免一个漏洞牵连全部数据。
密码策略要够狠,别用123456应付
某企业用“password”当数据库密码,被自动化扫描工具三分钟拿下。强密码必须包含大小写字母、数字和符号,长度不少于12位。定期更换也很关键,可以写个脚本每月自动更新一次:
ALTER USER 'app_db'@'%' IDENTIFIED BY 'N7$kP!mQ9wR&';顺便把旧密码从配置文件里删干净,别留在历史提交记录里。
开启日志审计,知道谁动过数据
出了问题查不出原因?那是没开审计日志。PostgreSQL通过设置log_statement = 'all'能记录每条SQL执行情况。MySQL也能启用general_log:
SET global general_log = on;虽然会占点磁盘空间,但发现异常查询时能快速定位源头。上周就有客户靠日志发现某个接口被反复试探,及时封禁了攻击IP。
定期打补丁,别嫌重启麻烦
某版本MongoDB存在未授权访问漏洞,官方早就发了修复包,可运维一直没升级。结果黑客利用这个漏洞挖走了全部用户资料。操作系统和数据库软件的更新提醒不能当垃圾消息忽略,尤其是标着“Security Fix”的版本。安排在凌晨低峰期重启服务,总比白天停摆几小时强。
备份加密存储,防勒索更安心
光做防护不够,万一真被攻破要有退路。每天自动导出数据并加密压缩,上传到隔离网络的存储设备。可以用gpg加密:
mysqldump shop | gzip | gpg -c > backup_$(date +%F).sql.gz.gpg密码单独保管,即使备份文件被盗也无法解密。去年有家公司靠这套机制,在遭遇勒索病毒后六小时内恢复正常运营。