主机'xxx.xx.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;

尽管正如帕斯卡尔和其他人所指出的,让一个具有这种权限的用户对任何IP开放并不是一个好主意。如果你需要一个管理用户,请使用root,并把它留在localhost。对于任何其他的行动,都要准确地指定你所需要的权限,并限制用户的访问权限,就像Pascal在下面建议的那样。

编辑。

来自MySQL的FAQ。

如果你不能弄清楚为什么你会得到 拒绝访问,请从用户 表中删除所有具有Host 值包含通配符的条目(条目 含有'%'或'_'字符的条目)。)A 非常常见的错误是插入一个新的 条目,其中包含Host='%'和 User='some_user',认为这 允许你指定localhost来 从同一台机器上连接。而 这不起作用的原因是 默认权限包括一个 条目,其中有Host='localhost'和 User=''。因为该条目有一个Host 值'localhost',比'localhost'更具体。 比'%'更具体,它被用于 当从localhost连接时,它被优先于新条目。 > 从localhost连接!正确的 的程序是插入第二个条目 与Host='localhost'和 User='some_user',或者删除 输入Host='localhost'和 User=''。删除该条目后。 记得发出FLUSH PRIVILEGES 语句来重新加载授予表。 参见第5.4.4节,"访问"。 控制,第一阶段:连接 验证"。

评论(8)

消息 "*主机''xxx.xx.xxx''不允许连接到这个MySQL服务器 "是MySQL服务器对MySQL客户端的一个回复。注意它是如何返回IP地址而不是主机名的。

如果你试图用mysql -h -u -p连接,而它返回的信息是IP地址,那么MySQL服务器就无法对客户端进行反向查找。这很关键,因为它是如何将MySQL客户端映射到补助金的。

确保你能从MySQL服务器上做一个 "nslookup "。如果这不起作用,那么DNS服务器中就没有条目。或者,你可以在MySQL服务器的HOSTS文件中加入一个条目(` `

评论(1)

如果你手动修改授予表(使用INSERT,UPDATE,等等),你应该执行 语句来告诉服务器重新加载授予表。

PS:我不建议允许任何主机为用户连接(特别是不允许使用root)。如果你将mysql用于客户/服务器应用,最好使用子网地址。如果你在Web服务器或应用服务器上使用mysql,使用特定的IP。

评论(0)