MySQL - 错误 1045 (28000):用户访问被拒绝

dav*_*jhp 10 mysql

我刚刚在新机器上安装了 Ubuntu 10.04.2 LTS 的新副本。我以 root 身份登录 MySQL:

david@server1:~$ mysql -u root -p123
Run Code Online (Sandbox Code Playgroud)

我创建了一个名为 repl 的新用户。我将主机留空,因此新用户可以从任何位置访问。

mysql> CREATE USER 'repl' IDENTIFIED BY '123';
Query OK, 0 rows affected (0.00 sec)
Run Code Online (Sandbox Code Playgroud)

我检查了用户表以验证新用户 repl 是否正确创建。

mysql> select host, user, password from mysql.user;
+-----------+------------------+-------------------------------------------+
| host      | user             | password                                  |
+-----------+------------------+-------------------------------------------+
| localhost | root             | *23AE809DDACAF96AF0FD78ED04B6A265E05AA257 |
| server1   | root             | *23AE809DDACAF96AF0FD78ED04B6A265E05AA257 |
| 127.0.0.1 | root             | *23AE809DDACAF96AF0FD78ED04B6A265E05AA257 |
| ::1       | root             | *23AE809DDACAF96AF0FD78ED04B6A265E05AA257 |
| localhost |                  |                                           |
| server1   |                  |                                           |
| localhost | debian-sys-maint | *27F00A6BAAE5070BCEF92DF91805028725C30188 |
| %         | repl             | *23AE809DDACAF96AF0FD78ED04B6A265E05AA257 |
+-----------+------------------+-------------------------------------------+
8 rows in set (0.00 sec)
Run Code Online (Sandbox Code Playgroud)

然后我退出,尝试以用户 repl 登录,但访问被拒绝。

david@server1:~$ mysql -u repl -p123
ERROR 1045 (28000): Access denied for user 'repl'@'localhost' (using password: YES)
david@server1:~$ mysql -urepl -p123
ERROR 1045 (28000): Access denied for user 'repl'@'localhost' (using password: YES)
david@server1:~$ 
Run Code Online (Sandbox Code Playgroud)

为什么访问被拒绝?

Rol*_*DBA 6

您无法登录的原因repl@'%'MySQL 的用户身份验证协议有关。它没有像人们相信的那样涵盖用户模式。

看看你是如何尝试登录的

mysql -u repl -p123
Run Code Online (Sandbox Code Playgroud)

由于您没有指定 IP 地址,mysql 假定主机是 localhost 并尝试通过套接字文件进行连接。这就是错误消息显示的原因Access denied for user 'repl'@'localhost' (using password: YES)

人们会认为repl@'%'会允许repl@localhost。根据MySQL 执行用户身份验证的方式,这将永远不会发生。这样做有帮助吗?

mysql -u repl -p123 -h127.0.0.1
Run Code Online (Sandbox Code Playgroud)

信不信由你,mysql 会repl@localhost再次尝试。为什么?mysql 客户端看到127.0.0.1并再次尝试套接字文件。

像这样尝试:

mysql -u repl -p123 -h127.0.0.1 --protocol=tcp
Run Code Online (Sandbox Code Playgroud)

这将强制 mysql 客户端明确使用 TCP/IP 协议。那么它就别无选择,只能交给 user repl@'%'


Man*_*noj 5

您应该针对特定于它的本地主机发出问题。

  GRANT USAGE ON *.* TO 'repl'@'localhost' IDENTIFIED BY '123';
Run Code Online (Sandbox Code Playgroud)

并尝试连接。