通过用户权限、配置绑定和防火墙规则可实现mysql IP白名单。1. 创建指定IP的用户并授予权限;2. 配置bind-address限制监听IP;3. 使用iptables或firewalld仅放行特定IP访问3306端口;4. 定期审计用户、关闭不必要的远程访问、启用ssl加密以增强安全。

MySQL 本身不直接提供“IP白名单”功能,但可以通过用户权限控制和防火墙规则实现访问 IP 的限制。以下是几种常用方法来配置 MySQL 的访问 IP 白名单。
1. 使用 MySQL 用户权限限制访问 IP
MySQL 的用户账户由用户名和主机名(或 IP)共同定义。通过指定允许连接的 IP 地址,可以限制只有特定 IP 能登录。
操作步骤:
- 登录 MySQL 服务器(使用 root 或有权限的账号):
mysql -u root -p
- 创建只允许特定 IP 访问的用户,例如只允许 192.168.1.100 访问:
CREATE USER ‘myuser’@’192.168.1.100’ IDENTIFIED BY ‘mypassword‘;
- 授予该用户所需权限(如对某个数据库的读写权限):
GRANT select, INSERT, UPDATE, delete ON mydb.* TO ‘myuser’@’192.168.1.100’;
- 刷新权限使更改生效:
FLUSH PRIVILEGES;
这样,只有来自 192.168.1.100 的连接才能使用该账号登录 MySQL。
你也可以使用子网形式,如 ‘myuser’@’192.168.1.%’ 表示允许 192.168.1.0/24 网段,但更推荐精确 IP 以增强安全性。
2. 修改 MySQL 配置绑定监听 IP
如果你只想让 MySQL 接受来自特定网络接口的连接,可以在配置文件中绑定 IP。
编辑 MySQL 配置文件(通常为 /etc/my.cnf 或 /etc/mysql/mysql.conf.d/mysqld.cnf):
[mysqld]
bind-address = 192.168.1.10
设置 bind-address 为服务器的内网 IP,避免监听 0.0.0.0(所有接口)。重启 MySQL 生效:
sudo systemctl restart mysql
3. 使用系统防火墙(iptables/firewalld)设置 IP 白名单
更严格的做法是结合操作系统防火墙,只放行指定 IP 对 MySQL 端口(默认 3306)的访问。
使用 iptables 示例:
# 清空规则(谨慎操作)
iptables -F
# 只允许 192.168.1.100 访问 3306
iptables -A input -p tcp -s 192.168.1.100 –dport 3306 -j ACCEPT
# 拒绝其他所有 IP 访问 3306
iptables -A INPUT -p tcp –dport 3306 -j DROP
保存规则并设置开机生效(根据系统不同命令略有差异)。
使用 firewalld(centos/RHEL):
firewall-cmd –permanent –add-rich-rule=’rule family=”ipv4″ source address=”192.168.1.100″ port protocol=”tcp” port=”3306″ accept’
firewall-cmd –reload
4. 注意事项与安全建议
确保以下几点以提升安全性:
- 避免使用 ‘root’@’%’ 这类远程开放账号
- 定期检查用户列表:SELECT user, host FROM mysql.user;
- 关闭不必要的远程访问,仅在必要时开启
- 启用日志审计,监控异常登录尝试
- 使用 SSL 加密连接(尤其跨公网)
基本上就这些。通过组合用户权限 + 防火墙规则,可以有效实现 MySQL 的 IP 白名单访问控制。不复杂但容易忽略细节,建议逐项检查。