MySQL安全加固教程:从默认配置到最小权限的完整步骤

MySQL 装好后默认配置往往偏宽松,直接暴露在公网会带来弱口令、匿名登录和文件读取等风险。
这篇 MySQL 安全加固教程按“先查现状、再改配置、后验证”的顺序展开,适用于 MySQL 5.7 和 8.0 的常见 Linux 环境,操作前请确认你拥有 root 或 sudo 权限,并已对数据库做过可用的备份。

加固前先确认环境和当前风险

登录 MySQL,执行下面几条查询,先看清现状再动手:

SELECT user, host FROM mysql.user;
SHOW VARIABLES LIKE 'local_infile';
SHOW VARIABLES LIKE 'bind_address';
SHOW VARIABLES LIKE 'validate_password%';

重点看三类结果:是否存在 user='' 的匿名账号、root 的 host 是否为 %、local_infile 是否 ON。
如果服务器有公网 IP,再在 MySQL 主机上确认监听端口:

ss -tlnp | grep 3306

输出里出现 0.0.0.0:3306 表示监听所有网卡。
若业务只在本机调用,应改为只监听 127.0.0.1;
若必须远程访问,则用安全组或防火墙限制来源 IP,而不是放开给所有人。

清理匿名账号和多余授权

匿名账号允许无用户名登录,属于历史遗留风险,优先删除:

DELETE FROM mysql.user WHERE user='';
FLUSH PRIVILEGES;

接着检查是否有测试库或测试账号仍带 % 主机。
删除账号用 DROP USER,比直接改表更规范:

DROP USER 'test'@'%';

如果暂时不确定某个账号是否在用,先不要删,改为收回权限:

REVOKE ALL PRIVILEGES, GRANT OPTION FROM 'test'@'%';

执行完再次 SELECT user, host FROM mysql.user; 确认匿名行已消失、剩余账号都是你认识的。

限制 root 登录来源并收紧权限

root 允许从任意主机登录是常见隐患。
推荐做法是保留本机 root,远程管理改用普通账号加 sudo 或跳板机。
修改 root 主机范围:

RENAME USER 'root'@'%' TO 'root'@'localhost';

如果 root 原本就是 localhost,跳过这步。
然后给业务账号按“最小权限”授权,只给需要的库和操作:

CREATE USER 'app'@'10.0.0.%' IDENTIFIED BY '强密码';
GRANT SELECT, INSERT, UPDATE, DELETE ON appdb.* TO 'app'@'10.0.0.%';
FLUSH PRIVILEGES;

注意 10.0.0.% 这种网段写法只适合内网;
公网环境应写成具体 IP。
密码不要用明文写在脚本里,可用 MySQL 的 mysql_config_editor 保存登录路径,或交给配置管理工具。

修改 my.cnf 关闭高风险选项

配置文件通常在 /etc/my.cnf 或 /etc/mysql/mysql.conf.d/mysqld.cnf。
修改前先备份:

cp /etc/my.cnf /etc/my.cnf.bak

在 [mysqld] 段加入或调整:

[mysqld]
bind-address = 127.0.0.1
local_infile = 0
skip-symbolic-links

bind-address 改成 127.0.0.1 后,只有本机能连;
远程业务需要改成内网 IP,并同步检查防火墙。local_infile=0 关闭客户端本地文件读取,能降低被利用读取服务器文件的风险。
改完重启生效:

systemctl restart mysqld

重启后再次执行 SHOW VARIABLES LIKE 'local_infile'; 应显示 OFF。
若服务起不来,先看 systemctl status mysqld 和错误日志,常见原因是配置项拼写错误或 bind-address 与现有连接冲突。

验证加固结果与常见疑问

验证分三步:端口只监听预期地址、匿名账号不存在、业务账号权限符合预期。

ss -tlnp | grep 3306
mysql -u app -p -h 10.0.0.5 -e "SELECT 1;"

第一条应只看到 127.0.0.1:3306 或指定内网 IP;
第二条用业务账号连接成功,说明授权网段正确。
如果连接被拒,先确认防火墙规则和账号 host 是否匹配。

关于 validate_password 插件,MySQL 8.0 默认可能未启用。
是否开启取决于你的合规要求,开启后旧弱密码账号可能需要重置,操作前先评估影响。
另外,加固不是一次性的,建议定期检查 mysql.user 表、慢查询和连接来源,把变更记录到运维文档里。
若你还在处理安装或远程连接报错,可先解决连通性再做权限收紧,顺序反了容易把自己锁在门外。

分享到:
上一篇
MySQL binlog配置:从开启到验证的完整步骤
下一篇
MySQL性能调优教程:从慢查询定位到参数调整的完整实操
1
系统公告

泽御云中秋国庆双节活动上线:新购8折,拼团3.99元起

尊敬的用户:
泽御云“月满中秋·礼贺国庆”双节活动现已开启,活动时间为2026年9月23日至10月10日。 活动期间可享以下福利:
1. 常规云服务器新购使用优惠码“泽御中秋国庆同乐”,符合条件的订单享8折优惠。
2. 香港精品云服务器5人拼团低至3.99元,部分4核4G套餐3人拼团年付388元,续费同价。
3. 新用户购买年付云服务器,符合活动规则可赠送2个月使用时长。
4. 老用户续费季度赠15天,续费年度赠2个月;活动期间升级配置免收配置迁移手续费。
5. 推荐好友成功下单,符合条件的推荐人可获赠7天服务器使用时长。
6. 活动期间享宕机补偿标准翻倍、简单网站迁移协助及技术工单优先处理权益。
温馨提示:优惠码不适用于拼团套餐、活动轻量产品、年付订单及续费订单;拼团套餐为独立特价活动,不与赠时类福利叠加。赠送时长不可折现、退款或跨账户转移,具体规则以活动页面说明为准。
服务中心
客服
在线客服
24小时为您服务
咨询
联系我们
联系我们,为您的业务提供专属服务。
24/7 技术支持
如果您遇到寻求进一步的帮助,请过工单与我们进行联系。
24/7 即时支持
泽御云
售前客服
泽御云
泽御云
售后客服
泽御云
技术支持
评价
您对当前页面的整体感受是否满意?
😞
非常不满意
😕
不满意
😐
一般
🙂
满意
😊
非常满意