在 MySQL 中限制用户远程登录,核心是控制用户的主机访问权限和网络配置。可以通过用户账户设置、MySQL 配置文件以及操作系统防火墙等多层手段实现。
1. 控制用户的主机访问权限
MySQL 用户账号由用户名和主机名共同定义。如果只允许本地登录,应避免创建允许远程连接的用户。
查看当前用户及其允许的主机:SELECT user, host FROM mysql.user;
确保敏感用户(如 root)仅绑定到本地:ALTER USER 'root'@'%' IDENTIFIED BY '密码' ACCOUNT LOCK; 或删除远程 root 账户:
DROP USER 'root'@'%';
只保留本地访问的用户:CREATE USER 'admin'@'localhost' IDENTIFIED BY '强密码';
这样该用户只能从本机登录,无法远程连接。
2. 修改 MySQL 配置绑定本地地址
编辑 MySQL 配置文件(通常为 my.cnf 或 my.ini),限制 MySQL 只监听本地回环地址。
找到 [mysqld] 段落,添加或修改:bind-address = 127.0.0.1
这表示 MySQL 仅接受来自本机的连接,拒绝外部 IP 访问。
保存后重启 MySQL 服务:sudo systemctl restart mysql(Linux 系统)
3. 使用防火墙限制访问端口
即使 MySQL 允许远程连接,也可以通过系统防火墙阻止外部访问 3306 端口。
使用 iptables 禁止外部访问:iptables -A INPUT -p tcp --dport 3306 -j DROP
若需仅允许可信 IP,例如只让 192.168.1.100 连接:iptables -A INPUT -p tcp -s 192.168.1.100 --dport 3306 -j ACCEPT
iptables -A INPUT -p tcp --dport 3306 -j DROP
4. 定期检查并清理远程用户
定期运行以下命令检查是否存在可远程登录的账户:
SELECT user, host FROM mysql.user WHERE host != 'localhost' AND host != '127.0.0.1';
发现不必要的远程访问账户,及时删除或限制。
基本上就这些。通过合理设置用户权限、绑定本地地址和防火墙规则,能有效防止 MySQL 被远程登录滥用。
