提问人:a3765910 提问时间:1/18/2016 最后编辑:a3765910 更新时间:12/11/2020 访问量:44372
用户“test”@“ip”的访问被拒绝(使用密码:YES)
Access denied for user 'test'@'ip'(using password: YES)
问:
我发现了很多关于这个错误的帖子,尝试了所有方法,但仍然遇到同样的错误。我正在尝试从我的远程应用程序和 mysql 客户端连接到 ubuntu 服务器上的 mysql。让我发布我已经采取的任何步骤:
- 停止 ubuntu 服务器上的防火墙:iptables -F。还尝试过使用 sudo 服务 ufw stop。
- 在/etc/mysql/my.cnf中注释了“bind-address”并重新启动了mysql。
- 在 mysql 中添加用户:CREATE USER 'test'@'%' IDENTIFIED BY 'testpwd';
- 授予 上的所有权限。到由带有授权选项的“TESTPWD”标识的“测试”@“%”;
- 刷新权限;
- 我可以通过“从mysql.user中选择主机,用户”看到新用户的条目;
- 再次重新启动MySQL。还是同样的错误!
- 现在我想防火墙可能仍然存在一些问题,所以添加了:iptables -A INPUT -i eth0 -p tcp --destination-port 3306 -j ACCEPT 问题仍然存在。
答:
首先,让我们检查一下 - 是否是网络/防火墙问题。 使用 --skip-grant-tables 启动 MySql 服务器,然后尝试连接到它。
评论
“用户'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
没有人会错误地插入这样的赠款,但有错误和错误。
评论
my.cnt
# Default to using old password format for compatibility with mysql 3.x # clients (those using the mysqlclient10 compatibility package). old_passwords=1
root
当我尝试连接到我的 MariaDb 数据库时,我的 .net 核心控制台应用程序上遇到了同样的错误。 我终于发现我的 connectionstring 中的 uid 不正确,因为它区分大小写! 即使我觉得自己很傻,它可能会有所帮助......
评论