协慌网

登录 贡献 社区

主机'xxx.xx.xxx.xxx' 不允许连接到该 MySQL 服务器

这本来应该很简单,但是我无法让它在我的一生中发挥作用。
我只是想远程连接到我的 MySQL 服务器。

  • 连接方式:
mysql -u root -h localhost -p
  • 工作正常,但尝试:
mysql -u root -h 'any ip address here' -p
  • 失败并显示以下错误:
ERROR 1130 (00000): Host ''xxx.xx.xxx.xxx'' is not allowed to connect to this MySQL server

mysql.user表中,具有主机 “localhost” 的用户 “root” 与具有主机 “%” 的另一个用户完全相同。

我无能为力,也不知道如何进行。任何想法都欢迎。

答案

可能是安全预防措施。您可以尝试添加新的管理员帐户:

mysql> CREATE USER 'monty'@'localhost' IDENTIFIED BY 'some_pass';
mysql> GRANT ALL PRIVILEGES ON *.* TO 'monty'@'localhost'
    ->     WITH GRANT OPTION;
mysql> CREATE USER 'monty'@'%' IDENTIFIED BY 'some_pass';
mysql> GRANT ALL PRIVILEGES ON *.* TO 'monty'@'%'
    ->     WITH GRANT OPTION;

尽管正如 Pascal 和其他人所指出的那样,让具有这种访问权限的用户可以访问任何 IP 并不是一个好主意。如果需要管理用户,请使用 root,并将其保留在 localhost 上。对于任何其他操作,请严格指定所需的特权,并按照 Pascal 的建议限制用户的可访问性。

编辑:

从 MySQL 常见问题解答:

如果无法弄清为什么拒绝访问,请从用户表中删除所有具有包含通配符(包含 “%” 或 “_” 字符)的主机值的条目。一个非常常见的错误是使用 Host ='%' 和 User ='some_user' 插入一个新条目,认为这允许您指定本地主机从同一台计算机进行连接。之所以不起作用,是因为默认特权包括一个带有 Host ='localhost' 和 User ='' 的条目。由于该条目的主机值'localhost'比'%'更具体,因此从 localhost 连接时,它优先于新条目使用!正确的过程是插入带有 Host ='localhost'和 User ='some_user'的第二个条目,或删除带有 Host ='localhost'和 User =''的条目。删除条目后,请记住发出 FLUSH PRIVILEGES 语句以重新加载授权表。另请参见第 5.4.4 节“访问控制,阶段 1:连接验证”。

必须创建一个new MySQL User并通过 phpMyAdmin 或命令提示符Query prompt分配权限,如下所示:

CREATE USER 'username'@'localhost' IDENTIFIED BY 'password';

GRANT ALL PRIVILEGES ON *.* TO 'username'@'localhost' WITH GRANT OPTION;

CREATE USER 'username'@'%' IDENTIFIED BY 'password';

GRANT ALL PRIVILEGES ON *.* TO 'username'@'%' WITH GRANT OPTION;

FLUSH PRIVILEGES;

完成所有四个查询后,它应该使用username / password

我的错误消息是类似的,并且说即使我使用 root,也不允许 “主机 XXX 连接到该 MySQL 服务器”。这是确保 root 拥有正确权限的方法。

我的设置

  • Ubuntu 14.04 LTS
  • MySQL v5.5.37

解决方案

  1. 打开 “etc / mysql / my.cnf” 下的文件
  2. 检查:

    • 端口(默认为 “端口 = 3306”)
    • 绑定地址(默认情况下为'bind-address = 127.0.0.1';如果您想向所有人开放,则只需注释掉此行。对于我的示例,我会说实际的服务器位于 10.1.1.7 上)
  3. 现在访问您实际服务器上的 MySQL 数据库(例如,您以用户 “root” 的身份在端口 3306 上的远程地址是 123.123.123.123,并且我想更改对数据库 “数据条目” 的权限。记住要更改 IP 地址,端口和数据库名称)到您的设置)

    mysql -u root -p
    Enter password: <enter password>
    mysql>GRANT ALL ON *.* to root@'123.123.123.123' IDENTIFIED BY 'put-your-password';
    mysql>FLUSH PRIVILEGES;
    mysql>exit
  4. sudo 服务 mysqld 重新启动

  5. 现在,您应该可以远程连接到数据库了。例如,我正在使用 MySQL Workbench,并输入 “主机名:10.1.1.7”,“端口:3306”,“用户名:root”