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

Posted

技术标签:

【中文标题】主机 \'xxx.xx.xxx.xxx\' 不允许连接到这个 MySQL 服务器【英文标题】:Host 'xxx.xx.xxx.xxx' is not allowed to connect to this MySQL server主机 'xxx.xx.xxx.xxx' 不允许连接到这个 MySQL 服务器 【发布时间】:2010-12-06 07:22:58 【问题描述】:

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

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

【问题讨论】:

出于安全考虑,在大多数情况下无法以 root 身份登录.. 【参考方案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' 和 用户=''。因为那个条目有一个主机 价值'localhost'更多 比 '%' 具体,它用于 偏好新条目时 从本地主机连接!正确的 过程是插入第二个条目 使用 Host='localhost' 和 user='some_user',或者删除 Host='localhost' 和 用户=''。删除条目后, 记得发出 FLUSH PRIVILEGES 语句重新加载授权表。 另见第 5.4.4 节,“访问 控制,第一阶段:连接 验证”。

【讨论】:

很好地抓住了 Yannick,但我不建议他将所有权限授予非 root 用户。也许是简化集? 嗯,这确实不是一个好主意,但允许“root”从所有主机连接是完全相同的,因为它处于相同的权限级别。 我想你错过了我的观点帕斯卡。关键是“root”用户已经拥有这些权限,并且他想让任何 ip 作为该用户进行身份验证。因此,如果这确实是他想要的,那么创建新管理员用户(具有完全相同的权限)的默认示例是他正在尝试的替代方法。 是的,Yannick,我读得很快,会删除我的评论。但是,AFAIK,权限在 MySQL 中运行良好,因此: 1. 也许 OP 手动修改了授权表,然后需要刷新权限。 2. 也许他没有为 root 使用正确的授权语法。添加另一个管理用户可能是一种解决方法,但它不能解决真正的问题恕我直言。 我觉得提供从所有主机到 root 的访问权限并不是一个合适的解决方案。相反,我创建了一个新用户并授予了一组减少的权限,我使用的一组在 MySQL Workbench 上被描述为“DBManager”。我也只允许本地网络中的特定主机组访问,特别是 192.168.0.%【参考方案2】:

必须创建一个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 连接

【讨论】:

在完成上述步骤后必须重新启动 mysql 才能为我工作。 你必须创建 username@localhost 吗?只创建 username@% 还不够吗?我的意思是,如果你只是创建 username@%,你会无法从 localhost 连接到该用户吗? 是的,如果权限以某种方式不同,那么创建@localhost 是有意义的,但在这里它们是相同的,并且可能会比任何事情都更令人困惑(例如在没有意识到的情况下更改密码)其他存在,并且您的登录可能正在点击那个)。 作为一个初学者,它真的帮助了我 感谢它解决了我在 windows 容器化 laravel 应用程序中的“SQLSTATE[HY000] [1130] 主机 'DESKTOP-xxx.xx' 不允许连接到这个 MariaDB 服务器”【参考方案3】:

我的错误信息类似,说“Host XXX is not allowed to connect to this MySQL server”,即使我使用的是 root。以下是确保 root 具有正确权限的方法。

我的设置

Ubuntu 14.04 LTS MySQL v5.5.37

解决方案

    打开'etc/mysql/my.cnf'下的文件

    检查:

    端口(默认为'port = 3306') bind-address(默认情况下这是'bind-address = 127.0.0.1';如果你想对所有人开放,那么只需注释掉这一行。对于我的例子,我会说实际的服务器在10.1上。 1.7)

    现在访问您实际服务器上的 MySQL 数据库(假设您的远程地址是 123.123.123.123 端口 3306 作为用户“root”,我想更改数据库“dataentry”的权限。记得更改 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
    

    sudo 服务 mysqld 重启

    您现在应该能够远程连接到您的数据库。例如,我使用 MySQL Workbench 并输入 'Hostname:10.1.1.7', 'Port:3306', 'Username:root'

【讨论】:

您可以跳过use dataentry 行(因为大多数人不会创建该数据库)。 我能够做到这一点,而无需在最后重新启动 mysql 服务 FLUSH PRIVILEGES 应该让你不需要重新启动。 这对我来说适用于具有 FLUSH PRIVILEGES 的 Windows 10 上的 MySQL 5.5,无需重新启动服务。在 Windows 上,服务的属性应该标识用于配置的 my.ini 文件(属性 | 常规 | 可执行文件的路径) 我假设通过指定 bind-address="0.0.0.0" 它会监听所有接口并且远程连接会起作用,但我错了。是的,netstat 显示 mysql 正在侦听 0.0.0.0(所有接口),但我在问题标题中收到错误消息。一旦我完全删除了绑定地址行,它就开始工作了。很奇怪。【参考方案4】:

只需执行以下步骤:

1a) 连接到 mysql(通过 localhost)

mysql -uroot -p

1b) 如果 mysql 服务器在 Kubernetes (K8s) 中运行并通过 NodePort 访问

kubectl exec -it [pod-name] -- /bin/bash
mysql -uroot -p

    创建用户

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

    授予权限

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

    刷新权限

    FLUSH PRIVILEGES;

【讨论】:

ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using passwoYES)Y 应该 \*.\* 是 *.* 吗? 这也适用于 docker 的类似问题吗? devops.stackexchange.com/q/12449/23443 mysql docker容器怎么办?【参考方案5】:

您需要从任何主机名授予用户访问权限。

这是您从 phpmyadmin 添加新权限的方式

转到权限 > 添加新用户

为所需的用户名选择任何主机

【讨论】:

先生!非常感谢您的回答,它对我有用;简单快捷! 我认为这需要添加到 MAMP for Mac 帮助文件中。 2021 年仍然有效【参考方案6】:

消息*Host ''xxx.xx.xxx.xxx'' is not allowed to connect to this MySQL server 是 MySQL 服务器对 MySQL 客户端的回复。注意它是如何返回 IP 地址而不是主机名的。

如果您尝试与mysql -h&lt;hostname&gt; -u&lt;somebody&gt; -p 连接,并且它返回此消息和 IP 地址,则 MySQL 服务器无法在客户端上进行反向查找。这很关键,因为这就是它将 MySQL 客户端映射到授权的方式。

确保您可以从 MySQL 服务器执行nslookup &lt;mysqlclient&gt;。如果这不起作用,则 DNS 服务器中没有条目。或者,您可以在 MySQL 服务器的 HOSTS 文件中添加一个条目(&lt;ipaddress&gt; &lt;fullyqualifiedhostname&gt; &lt;hostname&gt;

我的服务器主机文件中允许反向查找 MySQL 客户端的条目解决了这个问题。

【讨论】:

"是 MySQL 服务器对 MySQL 客户端的回复。"谢谢,我想知道错误来自哪里,我的机器或服务器。我有错误“ERROR 1130 (HY000):”等。【参考方案7】:

简单的方法:

Grant All Privileges ON *.* to 'USER_NAME'@'%' Identified By 'YOUR_PASSWORD'; 

然后

FLUSH PRIVILEGES;

完成!

【讨论】:

% 表示什么? 一切都一样。您可以像示例:WHERE CustomerName LIKE 'a%' - 查找以“a”开头的任何值【参考方案8】:

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

PS:我不建议允许 any 主机为 any 用户连接(尤其是root 使用)。如果您将 mysql 用于客户端/服务器应用程序,则首选子网地址。如果您将 mysql 与 Web 服务器或应用程序服务器一起使用,请使用特定的 IP。

【讨论】:

【参考方案9】:

这适用于任何未来的远程 mysql 连接!

    sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf

导航到以绑定地址指令开头的行。它应该是这样的:

    bind-address            = 0.0.0.0

以root终端登录你的mysql

    mysql -u root -p
    -- root password

    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;

    EXIT;

最后通过以下命令授予该机器远程连接数据库的独占权限。

    sudo ufw allow from remote_IP_address to any port 3306

【讨论】:

【参考方案10】:

只需使用MySql的GUI Tool(SQLyog)提供的界面即可:

点击用户管理器:

现在,如果您想授予任何其他远程 PC 的访问权限,只需确保如下图所示,主机字段值为 %(即通配符)

【讨论】:

【参考方案11】:

这里的大多数答案显示您创建具有两个主机值的用户:一个用于localhost,一个用于%

请注意,除了像 root 这样的内置 localhost 用户外,您不需要这样做。如果您只是想创建一个可以从任何地方登录的新用户,您可以使用

CREATE USER 'myuser'@'%' IDENTIFIED BY 'mypassword';
GRANT <whatever privileges are appropriate> ON <relevant tables> TO myuser;

它会工作得很好。 (正如其他人所提到的,向任何域的用户授予管理权限是一个糟糕的主意。)

【讨论】:

【参考方案12】:

简单的方法是用root帐户登录phpmyadmin,进入mysql数据库并选择用户表,编辑root帐户并在主机字段中添加%通配符。然后通过 ssh 刷新权限

 FLUSH PRIVILEGES;

【讨论】:

这帮助我结合了这个:GRANT ALL PRIVILEGES ON . TO 'root'@'%' WITH GRANT OPTION;【参考方案13】:

嗯,以上答案对我没有任何帮助。经过大量研究,我找到了解决方案。虽然我可能会迟到,但这可能会帮助其他人。

从终端登录到您的 SQL 服务器

 mysql -u root -p
 -- root password
GRANT ALL ON *.* to root@'XX.XXX.XXX.XX' IDENTIFIED BY 'password';

这应该可以解决权限问题。

编码愉快!!

【讨论】:

【参考方案14】:

如果这是最近安装的 mysql,那么在更改任何其他内容之前,请尝试执行此命令,然后重试:

flush privileges;

仅此一项就解决了我在 Ubuntu 16.04、mysql 5.7.20 上的问题。 YMMV。

【讨论】:

【参考方案15】:

从您的主机控制面板中找到更好的方法(我在这里使用 DirectAdmin)

只需转到控制面板中的目标服务器数据库,在我的例子中: MySQL管理->选择您的数据库->您会发现:“访问主机”,只需在此处添加您的远程主机即可!

我猜想在 plesk 等其他 C.panels 上也有类似的选项。

希望对你也有帮助。

【讨论】:

【参考方案16】:

如果您碰巧在 Windows 上运行;一个简单的解决方案是运行 MySQL 服务器实例配置向导。它位于开始菜单中的 MYSQL 组中。在倒数第二个屏幕上,单击“允许从远程计算机进行 root 访问”框。

【讨论】:

【参考方案17】:

如果你有 WAMP Server + Windows 10 并且你将它用于开发而不是右键单击 Wamp 图标 => Wamp Settings => Check Allow Virtual Hosts other than 127*

【讨论】:

【参考方案18】:

如果您使用的是 MySQL WorkBench,则可以轻松实现:

    从菜单中,选择服务器 -> 用户和权限

    在左下角,点击“添加帐户”

    用用户名、主机匹配(% 表示每个主机)和密码填写表格

    点击右下角的“应用”

在这之后你就可以走了。然后,如果要优化配置,可以使用“管理角色”选项卡设置用户可以使用的命令(SELECT、ALTER 等)和“架构权限”选项卡将用户交互限制为特定的架构。

【讨论】:

【参考方案19】:

你可以做的就是打开 mysql.cfg 文件,你必须将 Bind-address 更改为此

绑定地址 = 127.0.0.1

然后重启mysql,你就可以连接那个服务器了。

看这个你可以有想法。

this is real sol

【讨论】:

这是相关的,但不是同一个问题。最初收到的错误表明客户端成功连接到 MySQL 服务器,但随后身份验证失败。如果 bind-address 设置为 127.0.0.1,则会收到连接被拒绝错误。 但这是允许所有主机连接到服务器的地址吗? 但是如果你有客户端用户并且你不允许创建具有所有权限的用户,那么授予用户所有权限对于那个 bcoz 来说不是明智的选择,那么解决方案是什么。?跨度> 【参考方案20】:

这个答案可能对某人有所帮助......

所有这些答案都没有帮助,然后我意识到我忘了检查一件关键的事情.. 端口 :)

我在另一个端口上运行的 docker 容器中运行 mysql。我在端口 3306 上指向我的主机,我有一个 mysql 服务器在其上运行。我的容器在端口 33060 上公开服务器。所以一直以来,我都在看错误的服务器!呵呵!

【讨论】:

【参考方案21】:

这适用于 DirectAdmin

    转到您的DirectAdmin。 转到您的MySQL Management。 选择您的database。 在Accesse Host 选项卡下,有一个字段。 您应该使用xxx.xx.xxx.xx 填写此字段。 点击Add Host

完成。现在您可以通过your_database_usernameyour_database_password 访问此数据库。如此简单!

【讨论】:

【参考方案22】:
CREATE USER 'username'@'localhost' IDENTIFIED BY 'password';
FLUSH PRIVILEGES;

这个错误是因为没有root密码,当你尝试从外部连接时,这可能发生在你身上。

【讨论】:

【参考方案23】:

CPANEL 解决方案

转到 Cpanel,查找 Remote MySQL。 在输入字段中添加 IP:

主机(允许使用 % 通配符)

评论以记住IP是什么。 对我来说就是这样。

【讨论】:

【参考方案24】:

我也遇到了同样的问题,我在 2 分钟内解决了我只是通过 cpanel 将 ip 列入白名单

假设您正在尝试从服务器 A 连接服务器 B 的数据库。 转到Server B Cpanel->Remote MySQL->输入Server A IP地址就可以了。

【讨论】:

【参考方案25】:

问题:root@localhost 无法连接到 openSUSE 42.2-1.150.x86_64 上全新安装的 mysql-community-server。 Mysql 拒绝连接 - 句号。

解决方案:

$ ls -l /var/lib/mysql/mysql/user.*
-rw-rw---- 1 mysql mysql     0 Apr 29 19:44 /var/lib/mysql/mysql/user.MYD
-rw-rw---- 1 mysql mysql  1024 Apr 29 19:44 /var/lib/mysql/mysql/user.MYI
-rw-rw---- 1 mysql mysql 10684 Apr 29 19:44 /var/lib/mysql/mysql/user.frm

文件 user.MYD 的大小为 0(真的吗?!)。 我从另一个工作系统复制了所有 3 个文件。

$ /usr/sbin/rcmysql stop
$ cd /var/lib/mysql/mysql/
$ scp root@othersytem:/var/lib/mysql/mysql/user.* ./
$ /usr/sbin/rcmysql start
$ cd -
$ mysql -u root -p

我能够登录。然后,只需重新应用所有架构权限即可。 此外,如果您禁用了 IPv6,请暂时重新启用它,以便 root@::1 帐户也可以工作。

【讨论】:

【参考方案26】:

如果你试图在没有定义连接字符串的情况下执行 mysql 查询,你会得到这个错误。

您可能忘记在执行之前定义连接字符串。你检查过吗? (抱歉英语不好)

【讨论】:

【参考方案27】:

这里的所有答案都不适用于我的情况,所以我邀请这可能会在未来帮助其他用户。这也可能是我们代码中的问题,而不仅仅是 MySQL 中的问题。

如果您使用的是VB.NET

代替这段代码:

 Dim server As String = My.Settings.DB_Server
 Dim username As String = My.Settings.DB_Username
 Dim password As String = My.Settings.DB_Password
 Dim database As String = My.Settings.DB_Database

 MysqlConn.ConnectionString = "server=" & server & ";" _
 & "user id=" & username & ";" _
 & "password=" & password & ";" _
 & "database=" & database

 MysqlConn = New MySqlConnection()

您需要将MysqlConn = New MySqlConnection() 移动到第一行。所以会是这样的

 MysqlConn = New MySqlConnection()

 Dim server As String = My.Settings.DB_Server
 Dim username As String = My.Settings.DB_Username
 Dim password As String = My.Settings.DB_Password
 Dim database As String = My.Settings.DB_Database

 MysqlConn.ConnectionString = "server=" & server & ";" _
 & "user id=" & username & ";" _
 & "password=" & password & ";" _
 & "database=" & database

【讨论】:

在回答之前先正确阅读问题。您的回答无关紧要,根本没有帮助!

以上是关于主机 'xxx.xx.xxx.xxx' 不允许连接到这个 MySQL 服务器的主要内容,如果未能解决你的问题,请参考以下文章

通过文件客户端连接到远程服务器

vue 添加一个二级目录

linuxlinux nc命令 测试网络连通性

如何在 PostgreSQL 中编写这个 MySQL 位?

javaweb part6---jstl以及el表达式

配置Ubuntu 线上服务器(二) 修改服务器默认端口