必须关闭默认宽松策略,从网络、传输、认证三层面收紧:限制3306端口仅对可信ip开放安全组规则,禁止0.0.0.0/0放行;强制启用tls1.2+加密传输并禁用弱协议;禁用root远程登录,为每个应用创建最小权限独立账号。

直接暴露在公网的云服务器 MySQL 实例,90% 以上的入侵事件源于基础安全配置缺失。必须关闭默认宽松策略,从网络、传输、认证三层面收紧。
限制 3306 端口仅对可信 IP 开放
安全组或防火墙规则不设白名单,等于把数据库大门敞开。云平台的安全组是第一道防线,比 MySQL 自身的 bind_address 更前置、更可靠。
- 禁止使用
0.0.0.0/0放行 3306 端口——哪怕临时调试也不建议 - 应用服务器与数据库服务器应在同一 VPC 内,用内网 CIDR(如
10.0.1.0/24)代替公网 IP - 管理访问必须走跳板机(堡垒机),单独划出管理子网,且仅允许 SSH(22 端口)入向
- 阿里云/AWS 腾讯云控制台中,安全组规则需显式拒绝未匹配流量(默认 deny)
强制启用 TLS 1.2+ 并禁用弱协议
明文传输密码和查询内容,在云环境中极易被同宿主机其他租户嗅探。MySQL 5.7+ 默认支持 SSL,但必须显式开启并验证客户端行为。
- 在
my.cnf中配置ssl-ca、ssl-cert、ssl-key,路径权限设为600 - 必须设置
require_secure_transport = ON,否则客户端仍可降级到非加密连接 - 连接时客户端需加参数:
--ssl-mode=REQUIRED;用程序连接时(如 Python 的pymysql)要显式传ssl={'ca': 'ca.pem'} - 禁用旧协议:在配置中添加
tls_version = TLSv1.2,TLSv1.3,避免 TLSv1.0/TLSv1.1 被利用
禁用 root 远程登录 + 遵循最小权限原则
云环境里,root@'%' 是高危账号。一旦密码泄露或弱口令被爆破,等同于交出整台服务器控制权。
- 初始化后立即执行:
DROP USER 'root'@'%';,只保留'root'@'localhost' - 为每个应用创建独立账号,例如
CREATE USER 'app_payment'@'10.0.1.5' IDENTIFIED BY 'strong_pass_2026'; - 授权时严格限定范围:
GRANT SELECT, INSERT ON payment_db.orders TO 'app_payment'@'10.0.1.5';,不给GRANT OPTION或FILE权限 - 定期审计账号:
SELECT user, host, account_locked FROM mysql.user;,锁定长期不用或异常登录的账号
最容易被忽略的是证书生命周期和密钥管理——自签证书过期后连接会静默失败,而密钥文件若放在 /etc/mysql/ 下又被备份脚本一并打包上传,反而扩大泄露面。务必把 keyring_file_data 指向独立挂载的加密卷,并设置 chown mysql:mysql 和 chmod 600。











