MySQL作为最流行的开源关系型数据库之一,在各类业务系统中承担着核心数据存储职责。一旦数据库被攻破,往往意味着用户隐私与业务资产的大规模泄露。因此,从部署之初就有必要实施系统性的安全加固,而不是等发生入侵后再做补救。

一、网络层访问控制
数据库服务默认监听3306端口,若直接绑定到公网IP,会面临全球范围的暴力破解与漏洞扫描。最基础也最有效的防护是限制网络可达性。在服务器防火墙或云安全组中,应仅放行应用服务器所在网段对数据库端口的访问,彻底阻断来自互联网的直连请求。
除了防火墙规则,还可以修改MySQL配置文件中的绑定地址与端口。将bind-address设为内网地址,并考虑更改默认端口,虽然这不能替代访问控制,但能减少自动化工具的命中概率。相关配置示例如下:
[mysqld] # 仅监听内网IP,禁止公网直接访问 bind-address = 192.168.0.10 # 修改默认端口,降低被扫描概率 port = 3307 # 禁用DNS反向解析,提升连接速度并减少被解析攻击面 skip-name-resolve
上述配置修改后需重启MySQL服务生效。需要强调的是,网络隔离只是第一道防线,即便在内网,也应假设同网段其他主机可能失陷,因此账号与权限控制依然不可或缺。
二、账号与权限最小化
很多部署习惯使用root账号远程连接数据库,这极其危险。root拥有全部权限,一旦凭证泄露,攻击者可轻易删库或提权。正确做法是禁止root远程登录,仅为本地维护保留root,且设置强密码。
为每个业务应用创建独立数据库账户,并严格限制其权限范围。例如某订单服务只需读写order库,就不该赋予其操作user库的权限。通过CREATE USER与GRANT语句可实现精细控制:
-- 创建仅限内网访问的应用账号
CREATE USER 'order_app'@'192.168.0.%' IDENTIFIED BY 'StrongPass#2024';
-- 仅授予order库下表的增删改查权限
GRANT SELECT, INSERT, UPDATE, DELETE ON order_db.* TO 'order_app'@'192.168.0.%';
-- 禁止root远程登录(确保root host为localhost)
DELETE FROM mysql.user WHERE User='root' AND Host NOT IN ('localhost','127.0.0.1');
FLUSH PRIVILEGES;
权限最小化能显著缩小入侵影响面。即便某个应用账号被盗,攻击者也无法横向访问其他业务数据。同时应定期审计mysql.user表,清理废弃账号,避免权限冗余积累。
三、传输加密与存储安全
MySQL客户端与服务端默认以明文传输数据,在同网段被嗅探或经过不可信网络时,凭证与业务数据会被直接截取。启用SSL加密可解决这一问题。MySQL自带SSL支持,生成证书后于配置中开启即可。
在服务器端配置证书路径,并要求特定用户必须使用SSL连接:
[mysqld] ssl-ca = /etc/mysql/ssl/ca.pem ssl-cert = /etc/mysql/ssl/server-cert.pem ssl-key = /etc/mysql/ssl/server-key.pem
-- 强制应用账号通过SSL连接 ALTER USER 'order_app'@'192.168.0.%' REQUIRE SSL;
除传输层外,若磁盘可能丢失或被人物理接触,还应对敏感字段采用应用层加密,或启用MySQL的静态加密特性(如InnoDB表空间加密)。不过表空间加密需要企业版或特定版本支持,社区版通常更依赖操作系统级磁盘加密配合。
四、审计、补丁与防暴力破解
开启慢查询日志与通用查询日志(生产环境慎用通用日志)有助于追溯异常操作。社区版可借助MariaDB Audit Plugin或第三方工具实现审计。通过监控失败登录次数,能及时发现暴力破解尝试。
在账号策略上,可借助connection_control插件延缓频繁失败登录,并保持版本更新以修复已知漏洞。以下示例展示如何安装连接控制插件:
INSTALL PLUGIN connection_control SONAME 'connection_control.so'; INSTALL PLUGIN connection_control_failed_login_attempts SONAME 'connection_control.so'; SET GLOBAL connection_control_failed_connections_threshold = 5; SET GLOBAL connection_control_min_connection_delay = 1000;
该配置表示连续失败5次后,后续连接将被延迟至少1秒,有效拖慢暴力破解效率。配合定期安全更新,可构建较为完整的防护体系。安全加固不是一次性动作,而应随业务演进持续审视配置与权限现状。