主机 '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<hostname> -u<somebody> -p
连接,并且它返回此消息和 IP 地址,则 MySQL 服务器无法在客户端上进行反向查找。这很关键,因为这就是它将 MySQL 客户端映射到授权的方式。
确保您可以从 MySQL 服务器执行nslookup <mysqlclient>
。如果这不起作用,则 DNS 服务器中没有条目。或者,您可以在 MySQL 服务器的 HOSTS 文件中添加一个条目(<ipaddress> <fullyqualifiedhostname> <hostname>
我的服务器主机文件中允许反向查找 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_username
和your_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 服务器的主要内容,如果未能解决你的问题,请参考以下文章