MySQL限制用户仅从指定IP访问需创建用户时精确指定host,如'appuser'@'192.168.1.50',并配合GRANT授权、FLUSH PRIVILEGES生效,同时建议结合防火墙、bind-address和SSL等多重安全措施。

MySQL 限制用户只能从指定 IP 访问,核心是创建用户时明确指定 host(主机地址),并配合防火墙或网络策略增强安全性。默认的 'user'@'localhost' 只允许本机连接;而 'user'@'192.168.1.100' 就只允许该 IP 连接。
创建指定 IP 的用户
使用 CREATE USER 语句时,在用户名后用 @ 指定具体 IP 或域名:
-
CREATE USER 'appuser'@'192.168.1.50' IDENTIFIED BY 'strongpass123';—— 仅允许 192.168.1.50 连接 -
CREATE USER 'admin'@'10.0.2.0/255.255.255.0' IDENTIFIED BY 'pass';—— 允许 10.0.2.0/24 网段(MySQL 8.0+ 支持 CIDR 格式) -
CREATE USER 'backup'@'%.example.com' IDENTIFIED BY 'bkpass';—— 允许匹配该域名的主机(需 DNS 可解析)
授权并刷新权限
创建用户后,用 GRANT 分配具体库表权限,并执行 FLUSH PRIVILEGES 生效:
GRANT SELECT, INSERT ON mydb.orders TO 'appuser'@'192.168.1.50';-
FLUSH PRIVILEGES;—— 必须执行,否则新规则不生效
注意:不要对 'user'@'%' 授权,否则会覆盖 IP 限制效果;如已存在通配符用户,建议先 DROP USER 'user'@'%'; 再重建。
验证与排查连接问题
从目标 IP 测试连接,确认是否受限:
- 在允许的机器上运行:
mysql -u appuser -p -h your-mysql-server-ip - 若报错
Access denied for user ... (using password: YES),可能是密码错误、host 不匹配,或用户未授权对应数据库 - 检查当前用户列表:
SELECT User, Host FROM mysql.user;确认 host 字段是否精确匹配 - 查看错误日志:
tail -f /var/log/mysql/error.log(路径依安装方式而异),常含拒绝原因
补充安全建议
仅靠 MySQL 用户 host 限制不够,建议组合使用:










