mysql如何限制用户只能访问指定ip_mysql访问控制方法

9次阅读

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

mysql如何限制用户只能访问指定ip_mysql访问控制方法

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 限制不够,建议组合使用:

  • 操作系统防火墙(如 iptables / ufw)只放行可信 IP 的 3306 端口
  • MySQL 配置文件中设置 bind-address = 127.0.0.1(仅本地监听),再通过 ssh 隧道或反向代理访问
  • 启用 SSL 连接,防止凭据在网络中明文传输
  • 定期审查 mysql.user 表,删除长期不用或 host 为 % 的高危账户
text=ZqhQzanResources