用户“test”@“ip”的访问被拒绝(使用密码:YES)

Access denied for user 'test'@'ip'(using password: YES)

提问人:a3765910 提问时间:1/18/2016 最后编辑:a3765910 更新时间:12/11/2020 访问量:44372

问:

我发现了很多关于这个错误的帖子,尝试了所有方法,但仍然遇到同样的错误。我正在尝试从我的远程应用程序和 mysql 客户端连接到 ubuntu 服务器上的 mysql。让我发布我已经采取的任何步骤:

  1. 停止 ubuntu 服务器上的防火墙:iptables -F。还尝试过使用 sudo 服务 ufw stop。
  2. 在/etc/mysql/my.cnf中注释了“bind-address”并重新启动了mysql。
  3. 在 mysql 中添加用户:CREATE USER 'test'@'%' IDENTIFIED BY 'testpwd';
  4. 授予 上的所有权限到由带有授权选项的“TESTPWD”标识的“测试”@“%”;
  5. 刷新权限;
  6. 我可以通过“从mysql.user中选择主机,用户”看到新用户的条目;
  7. 再次重新启动MySQL。还是同样的错误!
  8. 现在我想防火墙可能仍然存在一些问题,所以添加了:iptables -A INPUT -i eth0 -p tcp --destination-port 3306 -j ACCEPT 问题仍然存在。
MySQL的

评论

0赞 1/18/2016
您可以在本地连接吗?
0赞 Pierre Emmanuel Lallemant 1/18/2016
尝试在命令行(mysql -u root -p yourdatabase)的服务器上连接MySQL。如果它不起作用,您可以尝试“sudo service mysql stop”,然后尝试“sudo service mysql start”。如果停止不起作用,请多次pkill mysql并重新启动'sudo service mysql start'。在 ubuntu 上遇到了这个问题。
0赞 Matt 1/18/2016
只有当用户和密码组合通常由于 1:用户/密码不正确 2 而被拒绝时,才会出现该错误。主机没有以该用户身份登录的权限。远程服务器能够连接到服务器,但无法进行身份验证。
0赞 a3765910 1/18/2016
是的,我可以在本地连接它:sudo mysql -u test -p,但当我通过mysql客户端连接时仍然出现相同的错误
0赞 a3765910 1/18/2016
@matt,我可以从远程计算机对该服务器执行 ping 操作。虽然不确定其他特权。

答:

0赞 Lev Bystritskiy 1/18/2016 #1

首先,让我们检查一下 - 是否是网络/防火墙问题。 使用 --skip-grant-tables 启动 MySql 服务器,然后尝试连接到它。

评论

0赞 a3765910 1/18/2016
是的,只是做到了,但仍然没有运气。我想是的,我已经尝试了很多。我想可能还有其他问题。我不是网络人,所以这里有什么建议吗?
0赞 Lev Bystritskiy 1/18/2016
事实上,如果您可以在本地以 root 身份连接,但仍然无法从远程 PC 连接到不受通过保护的数据库,那么您可能遇到了一些 my.cnf 问题,例如跳过网络选项?
0赞 a3765910 1/18/2016
我的my.cnf中没有skip-networking选项,我有注释掉的“bind-address”参数
7赞 LSerni 1/18/2016 #2

“用户'test'@'ip'(使用密码:YES)的访问被拒绝”是MySQL错误。

这意味着在网络级别上,一切正常,因为要拒绝以给定用户身份访问,服务器必须了解您尝试以哪个用户身份连接。因此,网络、防火墙、路由等等,都必须正常工作;服务器必须正在侦听,等等。

问题“简单地”在于身份验证

尝试在本地连接到数据库(以覆盖身份验证)并检查权限表:

USE mysql;
SELECT User, Host, Password from user WHERE User = 'test';

请记住,您感兴趣的行是提及 IP 的行(因为错误消息指定了 IP而不是主机名 - 在这种情况下,这可能是 DNS 问题;主机名是服务器认为您来自的主机名,而不是您真正来自的主机名)。

用户/主机匹配从更具体更不具体。因此,如果您已经拥有:

user      host     password
test      1.2.3.4  foo

然后跑了,

GRANT... TO test@'%' ... PASSWORD bar

...此授权适用于除 1.2.3.4 之外的任何地方,其中密码将保持为“foo”。

从手册(上面的链接):

服务器使用排序规则对具有最具体的行进行排序 主机值优先。文字主机名和 IP 地址最多 特定。(文字 IP 地址的特异性不受以下因素影响 它是否有网络掩码,所以 192.168.1.13 和 192.168.1.0/255.255.255.0 被认为同样具体。模式“%”表示“任何主机”,并且最不具体。空字符串 '' 也表示 “任何主机”,但排序在 '%' 之后。具有相同主机的行 值以最具体的用户值排序(空白 用户值表示“任何用户”,并且最不具体)。对于具有 同样特定的 Host 和 User 值,顺序是不确定的。

你可能会被迫这样做

USE mysql;
DELETE FROM user WHERE User = 'test';
GRANT ALL PRIVILEGES ON database.* TO 'test'@'%' WITH GRANT OPTION;
FLUSH PRIVILEGES;

以确保授权表中没有引用用户“test”的虚假行。

(此外,我认为 GRANT 应该是,

GRANT ALL PRIVILEGES ON databasename.*

)


安全疑问(与答案无关)

上面的手册说:文字IP地址的特异性不受其是否具有网络掩码的影响,因此192.168.1.13和192.168.1.0/255.255.255.0被认为具有同等特异性

现在乍一看,对于localhost来说似乎非常具体(且无害)。如果我没记错的话,网络掩码确保它等同于 ,只是它非常具体并且将首先运行。因此127.0.0.1/0.0.0.0%

test     bar         %           
test     localfoo    127.0.0.1/0.0.0.0

意味着从任何地方的密码根本不是“bar”,而是“localfoo”。test

没有人会错误地插入这样的赠款,但有错误和错误

评论

0赞 SSpoke 1/18/2016
还想添加,请确保您已打开old_passwords,因为您可能有一个旧的MySQL客户端,该客户端不允许某些新密码哈希连接:)my.cnt# Default to using old password format for compatibility with mysql 3.x # clients (those using the mysqlclient10 compatibility package). old_passwords=1
0赞 a3765910 1/18/2016
我应该尝试删除mysql.user表中单个用户的多个条目吗?由于我正在尝试,我可以找到不同主机的用户“test”的多个条目,包括“%”
0赞 SSpoke 1/18/2016
我会删除所有用户期望并正确重新创建您需要的用户。root
0赞 a3765910 1/18/2016
@Iserni我现在已经尝试删除除root以外的所有用户,创建了一个新用户,但问题仍然存在
0赞 LSerni 1/18/2016
您确定要连接正确的服务器吗?这太奇怪了。如果暂时停止mysql服务器并尝试连接,会发生什么?它说连接被拒绝吗?
0赞 Bazinga 1/9/2020 #3

当我尝试连接到我的 MariaDb 数据库时,我的 .net 核心控制台应用程序上遇到了同样的错误。 我终于发现我的 connectionstring 中的 uid 不正确,因为它区分大小写! 即使我觉得自己很傻,它可能会有所帮助......