为了账号安全,请及时绑定邮箱和手机立即绑定

MySQL ERROR 1045(28000):用户'账单'@'localhost'拒绝访问

MySQL ERROR 1045(28000):用户'账单'@'localhost'拒绝访问

慕尼黑5688855 2019-05-27 15:14:24
首先让我提一下,我已经经历了许多建议的问题,并没有找到相关的答案。这就是我正在做的事情。我已连接到我的Amazon EC2实例。我可以使用以下命令使用MySQL root登录:mysql -u root -p然后我用主机%创建了一个新的用户账单CREATE USER 'bill'@'%' IDENTIFIED BY 'passpass';授予用户账单的所有权限:grant all privileges on *.* to 'bill'@'%' with grant option;然后我从root用户退出并尝试使用bill登录:mysql -u bill -p输入正确的密码并收到此错误:ERROR 1045(28000):用户'账单'@'localhost'拒绝访问(使用密码:YES)
查看完整描述

3 回答

?
子衿沉夜

TA贡献1828条经验 获得超3个赞

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

根据手册

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

  • 当客户端尝试连接时,服务器按排序顺序查看[表mysql.user]的行。

  • 服务器使用与客户端主机名和用户名匹配的第一行。

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

因此,这样的匿名用户将“屏蔽”任何其他用户,就像'[any_username]'@'%'连接时一样localhost

'bill'@'localhost'匹配'bill'@'%',但会匹配(例如)''@'localhost'beforehands。

推荐的解决方案是删除这个匿名用户(这通常是一件好事)。


以下编辑主要与主要问题无关。这些仅用于回答本主题中其他评论中提出的一些问题。

编辑1

'bill'@'%'通过套接字进行身份验证。

 root @ myhost:/home/mysql-5.5.16-linux2.6-x86_64# ./mysql -ubill -ppass --socket = / tmp / mysql-5.5.sock

    欢迎使用MySQL监视器(...)


    mysql> SELECT用户,主机FROM mysql.user;

    + ------ + ----------- +

    | 用户| 主持人|

    + ------ + ----------- +

    | 账单| %|

    | 根| 127.0.0.1 |

    | 根| :: 1 |

    | 根| localhost |

    + ------ + ----------- +

    4行(0.00秒)


    mysql> SELECT USER(),CURRENT_USER();

    + ---------------- + ---------------- +

    | USER()| CURRENT_USER()|

    + ---------------- + ---------------- +

    | bill @ localhost | 账单@%|

    + ---------------- + ---------------- +

    1排(0.02秒)


    mysql> SHOW VARIABLES LIKE'skip_networking';

    + ----------------- + ------- +

    | Variable_name | 价值|

    + ----------------- + ------- +

    | skip_networking | ON |

    + ----------------- + ------- +

    1排(0.00秒)


编辑2


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



    root @ myhost:/home/mysql-5.5.16-linux2.6-x86_64# ./mysql

    欢迎使用MySQL监视器(...)


    mysql> CREATE USER''@'localhost'通过'anotherpass'识别;

    查询正常,0行受影响(0.00秒)


    mysql>再见


    root @ myhost:/home/mysql-5.5.16-linux2.6-x86_64# ./mysql -ubill -ppass \

        --socket = / TMP / MySQL的-5.5.sock

    ERROR 1045(28000):用户'账单'@'localhost'拒绝访问(使用密码:YES)

    root @ myhost:/home/mysql-5.5.16-linux2.6-x86_64# ./mysql -ubill -ppass \

        -h127.0.0.1 --protocol = TCP

    ERROR 1045(28000):用户'账单'@'localhost'拒绝访问(使用密码:YES)

    root @ myhost:/home/mysql-5.5.16-linux2.6-x86_64# ./mysql -ubill -ppass \

        -hlocalhost --protocol = TCP

    ERROR 1045(28000):用户'账单'@'localhost'拒绝访问(使用密码:YES)


编辑3


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



    root @ myhost:/home/mysql-5.5.16-linux2.6-x86_64# ./mysql -ubill -panotherpass -hlocalhost

    欢迎使用MySQL监视器(...)


    mysql> SELECT USER(),CURRENT_USER();

    + ---------------- + ---------------- +

    | USER()| CURRENT_USER()|

    + ---------------- + ---------------- +

    | bill @ localhost | @localhost |

    + ---------------- + ---------------- +

    1排(0.01秒)


结论1,来自编辑1:可以'bill'@'%'通过套接字进行身份验证。

结论2,从编辑2:无论是通过TCP连接还是通过套接字连接都不会对身份验证过程产生影响(除了一个人不能像其他人一样连接,但'something'@'localhost'通过套接字,显然)。

结论3,来自编辑3:虽然我指定了-ubill,但我被授予了匿名用户的访问权限。这是因为上面提到的“排序规则”。请注意,在大多数默认安装中,存在无密码的匿名用户(应该保护/删除)。


查看完整回答
反对 回复 2019-05-27
?
HUX布斯

TA贡献1876条经验 获得超6个赞

尝试:

~$ mysql -u root -p
Enter Password:mysql> grant all privileges on *.* to bill@localhost identified by 'pass' with grant option;


查看完整回答
反对 回复 2019-05-27
  • 3 回答
  • 0 关注
  • 661 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信