小编典典

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

all

这应该很简单,但我 无法 让它为我的生活工作。
我只是想远程连接到我的 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’ 的条目与主机为 ‘%’ 的另一个条目完全相同。

我束手无策,不知道如何进行。欢迎任何想法。


阅读 119

收藏
2022-03-02

共1个答案

小编典典

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

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’ 插入一个新条目,认为这允许您指定 localhost
从同一台机器进行连接。这不起作用的原因是默认权限包括 Host=’localhost’ 和 User=’‘
的条目。因为该条目的主机值“localhost”比“%”更具体,所以在从 localhost
连接时优先使用它而不是新条目!正确的程序是插入第二个条目,其中 Host=’localhost’ 和 User=’some_user’,或删除
Host=’localhost’ 和 User=’‘ 的条目。删除条目后,请记住发出 FLUSH PRIVILEGES 语句以重新加载授权表。另请参见第
5.4.4 节,“访问控制,第 1 阶段:连接验证”。

2022-03-02