无法访问MySQL,错误代码1045 (28000): 用户'bill'@'localhost'被拒绝访问(使用密码:是)
P粉885562567
P粉885562567 2023-09-17 09:21:55
0
2
586

首先让我提到,我已经查看了许多建议的问题,但没有找到相关的答案。以下是我正在做的事情。

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

mysql -u root -p

然后我创建了一个新用户bill,主机为%

CREATE USER 'bill'@'%' IDENTIFIED BY 'passpass';

为用户bill授予所有权限:

grant all privileges on *.* to 'bill'@'%' with grant option;

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

mysql -u bill -p

输入正确的密码后,出现以下错误:

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

P粉885562567
P粉885562567

全部回复(2)
P粉186904731

尝试:

~$ mysql -u root -p
输入密码:

mysql> grant all privileges on *.* to bill@localhost identified by 'pass' with grant option;
P粉287345251

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

根据手册

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

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

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


下面的编辑对于主要问题来说大多不相关。这些只是为了回答本主题中其他评论中提出的一些问题。

编辑1

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


    root@myhost:/home/mysql-5.5.16-linux2.6-x86_64# ./mysql -ubill -ppass --socket=/tmp/mysql-5.5.sock
    欢迎使用 MySQL monitor(...)
    
    mysql> SELECT user, host FROM mysql.user;
    +------+-----------+
    | user | host      |
    +------+-----------+
    | bill | %         |
    | root | 127.0.0.1 |
    | root | ::1       |
    | root | localhost |
    +------+-----------+
    共有 4 行(0.00 秒)
    
    mysql> SELECT USER(), CURRENT_USER();
    +----------------+----------------+
    | USER()         | CURRENT_USER() |
    +----------------+----------------+
    | bill@localhost | bill@%         |
    +----------------+----------------+
    共有 1 行(0.02 秒)
    
    mysql> SHOW VARIABLES LIKE 'skip_networking';
    +-----------------+-------+
    | Variable_name   | Value |
    +-----------------+-------+
    | skip_networking | ON    |
    +-----------------+-------+
    共有 1 行(0.00 秒)
    

编辑2

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


    root@myhost:/home/mysql-5.5.16-linux2.6-x86_64# ./mysql
    欢迎使用 MySQL monitor(...)
    
    mysql> CREATE USER ''@'localhost' IDENTIFIED BY 'anotherpass';
    查询 OK,0 行受影响(0.00 秒)
    
    mysql> Bye

    root@myhost:/home/mysql-5.5.16-linux2.6-x86_64# ./mysql -ubill -ppass \
        --socket=/tmp/mysql-5.5.sock
    ERROR 1045 (28000): Access denied for user 'bill'@'localhost' (using password: YES)
    root@myhost:/home/mysql-5.5.16-linux2.6-x86_64# ./mysql -ubill -ppass \
        -h127.0.0.1 --protocol=TCP
    ERROR 1045 (28000): Access denied for user 'bill'@'localhost' (using password: YES)
    root@myhost:/home/mysql-5.5.16-linux2.6-x86_64# ./mysql -ubill -ppass \
        -hlocalhost --protocol=TCP
    ERROR 1045 (28000): Access denied for user 'bill'@'localhost' (using password: YES)

编辑3

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


    root@myhost:/home/mysql-5.5.16-linux2.6-x86_64# ./mysql -ubill -panotherpass -hlocalhost
    欢迎使用 MySQL monitor(...)

    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,但我被授予了匿名用户的访问权限。这是因为上面建议的“排序规则”。请注意,在大多数默认安装中,存在一个没有密码的匿名用户(应该进行安全/删除)。

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责声明 Sitemap
PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!