MySQL错误1045(28000):用户’bill’@’localhost’的访问被拒绝(使用密码:是)

首先让我提一下,我已经研究了许多建议性的问题,但没有找到相关的答案。这就是我正在做的

我已连接到我的Amazon EC2实例。我可以使用以下命令使用MySQL root登录:

mysql-u root-p

然后我用主机%

创建由“passpass”标识的用户“bill”@“%”;

已将所有特权授予用户帐单:

使用grant选项将**上的所有特权授予“%”票据“@”;

然后我退出root用户并尝试使用bill登录:

mysql-u-bill-p

输入了正确的密码并出现以下错误:

错误1045(28000):拒绝用户“bill”@“localhost”的访问(使用密码:YES)

您可能有一个匿名用户'@'localhost''@'127.0.0.1'

根据手册:

当可能存在多个匹配项时,服务器必须确定以下哪一项:
使用它们。它解决这个问题如下:(…)

  • 当客户端尝试连接时,服务器将按排序顺序查看表mysql.user的行
  • 服务器使用与客户端主机名和用户名匹配的第一行

(……)
服务器使用排序规则,首先对具有最特定主机值的行进行排序。
文字主机名和IP地址是最具体的

因此,当从localhost连接时,这样的匿名用户将“屏蔽”任何其他用户,如“[任何用户名]”@“%”

'bill'@'localhost'确实匹配'bill'@'%,但会在之前匹配(例如,''localhost'

建议的解决方案是删除这个匿名用户(无论如何,这通常是一件好事)


下面的编辑大多与主要问题无关。这些只是为了回答本帖其他评论中提出的一些问题。

编辑1

通过套接字验证为'bill'@'

[email protected]:/home/mysql-5.5.16-linux2.6-x86_64#/mysql-ubill-ppass-socket=/tmp/mysql-5.5.sock
欢迎使用MySQL监视器(…)
mysql>从mysql.user中选择用户、主机;
+------+-----------+
|用户|主机|
+------+-----------+
|账单|%|
|根数| 127.0.0.1|
|根|:::1|
|根|本地主机|
+------+-----------+
一组4行(0.00秒)
mysql>选择用户(),当前用户();
+----------------+----------------+
|用户()|当前用户()|
+----------------+----------------+
| [email protected]|账单@%|
+----------------+----------------+
一组1行(0.02秒)
mysql>显示“跳过网络”等变量;
+-----------------+-------+
|变量名称|值|
+-----------------+-------+
|跳过网络|打开|
+-----------------+-------+
一行一组(0.00秒)

编辑2

完全相同的设置,只是我重新激活了网络,现在我创建了一个匿名用户'@'localhost'

[email protected]:/home/mysql-5.5.16-linux2.6-x86_64#/mysql
欢迎使用MySQL监视器(…)
mysql>创建用户“”@'localhost',由'anotherpass'标识;
查询正常,0行受影响(0.00秒)
mysql>再见
[email protected]:/home/mysql-5.5.16-linux2.6-x86_64#/mysql-ubill-ppass\
--socket=/tmp/mysql-5.5.sock
错误1045(28000):拒绝用户“bill”@“localhost”的访问(使用密码:YES)
[email protected]:/home/mysql-5.5.16-linux2.6-x86_64#/mysql-ubill-ppass\
-h127.0.0.1——协议=TCP
错误1045(28000):拒绝用户“bill”@“localhost”的访问(使用密码:YES)
[email protected]:/home/mysql-5.5.16-linux2.6-x86_64#/mysql-ubill-ppass\
-hlocalhost——协议=TCP
错误1045(28000):拒绝用户“bill”@“localhost”的访问(使用密码:YES)

编辑3

与编辑2中的情况相同,现在提供匿名用户的密码

[email protected]:/home/mysql-5.5.16-linux2.6-x86_64#/mysql-ubill-panotherpass-hlocalhost
欢迎使用MySQL监视器(…)
mysql>选择用户(),当前用户();
+----------------+----------------+
|用户()|当前用户()|
+----------------+----------------+
| [email protected]|@localhost|
+----------------+----------------+
一行一组(0.01秒)

结论1,来自编辑1:可以通过套接字作为“bill”@“进行身份验证

结论2,来自编辑2:一个人是通过TCP连接还是通过套接字连接对身份验证过程没有影响(显然,除了通过套接字'something'@'localhost'之外,他不能作为任何人连接)

结论3,来自编辑3:尽管我指定了-ubill,但我已被授予作为匿名用户的访问权限。这是因为上面建议的“排序规则”。请注意,在大多数默认安装中,都存在一个无密码的匿名用户(应该对其进行保护/删除)

发表评论