Host 'xxx' is not allowed to connect to this MySQL server

382 阅读2分钟

这是我参与2022首次更文挑战的第22天,活动详情查看:2022首次更文挑战

本地使用 navicate 连接数据库时,测试连接显示远程连接失败信息。

1. 出现问题

服务器首次安装 MySQL后,在本地使用 navicate 工具远程连接 MySQL 数据库时,显示ERROR 1130: Host 'xxx' is not allowed to connect to this MySQL server

image.png

2. 问题原因

出现该问题的原因是因为 MySQL 数据库安装后默认仅支持localhost本地连接,使用其他电脑远程连接时就会报错。

3. 解决办法

对于该问题,可以通过修改 MySQL 的配置来允许远程连接访问数据库。

3.1 修改 user 表中 host 限制

  1. 数据库本地连接,mysql -u root -p,输入正确的密码登录
  2. 选择使用mysql数据库,use mysql;
    • 使用show databases;查看mysql中的数据库信息
    • 使用select database();查看当前选择的数据库
  3. 查看user表中root用户数据,select host,user from user where user='root';,可以看到其中的host字段值为localhost,表示允许本地登录
  4. 修改root用户对应的host为'%',update user set host='%' where user='root';,其中%代表允许所有的机器访问
  5. 更新成功后,使用sql语句刷新配置,flush privileges; 此时查询 user 表数据为:

image.png

本地使用navicate 远程连接成功。

3.2 MySQL访问授权方式

通过修改user表数据来允许远程连接,设置host为'%'后,所有电脑均可以远程连接数据库,存在较大的风险,可以通过授权的方式来控制更细粒度的数据访问。

  1. 允许所有用户使用root/123456远程连接访问mysql数据,GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '123456' WITH GRANT OPTION;
  2. 允许指定ip地址的用户使用root/123456远程连接访问mysql数据,GRANT ALL PRIVILEGES ON *.* TO 'root'@'ip' IDENTIFIED BY '123456' WITH GRANT OPTION;
  3. 允许指定ip地址的用户使用root/123456远程连接访问mysql的test表数据,GRANT ALL PRIVILEGES ON test.* TO 'root'@'ip' IDENTIFIED BY '123456' WITH GRANT OPTION;
  4. 最后,修改完成后一定要记得执行刷新语句,保证修改生效,flush privileges;