mysql如何配置远程登录安全_mysql网络权限设置

14次阅读

MySQL 默认不允许远程登录,因其绑定 127.0.0.1 且 root 用户 host 为 ’localhost’,仅响应本地连接;需修改 bind-address、授权指定 IP 用户并开放防火墙端口。

mysql 如何配置远程登录安全_mysql 网络权限设置

MySQL 默认为什么不允许远程登录

MySQL 安装后默认只监听 127.0.0.1(本地回环),且 root 用户的 host 字段是 'localhost',这意味着它只接受来自本机 Unix socket 或 127.0.0.1 的连接,不响应外部 IP 的 TCP 请求。

常见现象:ERROR 2003 (HY000): Can't connect to MySQL server on'x.x.x.x' (111) 或连接超时,本质是网络层或权限层被拦住。

  • 先确认 MySQL 是否监听外部地址:执行 netstat -tlnp | grep :3306,若只看到 127.0.0.1:3306,说明没开远程网络接口
  • 再查用户权限:登录 MySQL 后运行 SELECT host, user FROM mysql.user;,确认目标用户(如 root)的 host 值不是 % 或具体客户端 IP
  • 防火墙可能拦截 3306 端口,尤其是云服务器(阿里云 / 腾讯云安全组、AWS Security Group)需额外放行

如何安全地开通指定 IP 的远程访问

不推荐直接把 host 设为 '%'(全通),容易被暴力扫描。更稳妥的做法是限定来源 IP 或使用跳板机。

操作分三步,缺一不可:

  • 修改 MySQL 配置文件(通常是 /etc/mysql/mysql.conf.d/mysqld.cnf/etc/my.cnf),找到 bind-address 行,改为 bind-address = 0.0.0.0(监听所有接口)或更安全的 bind-address = 192.168.1.100(仅绑定内网 IP)
  • 重启服务:sudo systemctl restart mysql(Ubuntu/Debian)或 sudo systemctl restart mysqld(CentOS/RHEL)
  • 在 MySQL 内创建最小权限账号(不要改 root):
    CREATE USER 'appuser'@'192.168.1.50' IDENTIFIED BY 'StrongPass!2024';
    GRANT SELECT,INSERT,UPDATE ON mydb.* TO 'appuser'@'192.168.1.50';
    FLUSH PRIVILEGES;

    其中 '192.168.1.50' 是你应用服务器的真实 IP

MySQL 8.0+ 的密码认证插件要注意什么

MySQL 8.0 默认使用 caching_sha2_password 插件,老客户端(如某些 Python MySQLdb、旧版 Navicat)可能不兼容,连上会报错:Client does not support authentication protocol requested by server

解决方法不是降级插件,而是显式指定兼容方式:

  • 建用户时强制指定插件:CREATE USER 'appuser'@'192.168.1.50' IDENTIFIED WITH mysql_native_password BY 'StrongPass!2024';
  • 或修改已有用户:ALTER USER 'appuser'@'192.168.1.50' IDENTIFIED WITH mysql_native_password BY 'StrongPass!2024';
  • 注意:改完必须执行 FLUSH PRIVILEGES;,否则不生效

连接测试与常见失败点排查

别急着写代码,先用命令行验证基础链路是否通:

  • 从客户端机器执行:mysql -h 192.168.1.100 -u appuser -p(192.168.1.100 是 MySQL 服务器 IP)
  • 如果提示 Access denied for user,说明权限或密码错;如果是 Connection refused,大概率是 MySQL 没监听外部、端口被防火墙挡、或服务根本没起来
  • 云服务器务必检查两层防火墙:系统级(ufwfirewalld)和平台级(安全组规则里 3306 入方向是否允许你的 IP)
  • 某些 ISP 或企业网络会屏蔽 3306,可临时换端口(改 mysqld.cnf 中的 port),但生产环境不建议

真正麻烦的往往不是配置本身,而是权限粒度控制不到位——比如给应用账号赋予了 DROPFILE 权限,或者忘了禁用空密码、匿名用户、test 数据库等默认风险项。

text=ZqhQzanResources