MySQL - ERROR 1045 (28000): Truy cập bị từ chối cho người dùng


9

Tôi vừa cài đặt một bản sao mới của Ubuntu 10.04.2 LTS trên một máy mới. Tôi đã đăng nhập vào MySQL với quyền root:

david@server1:~$ mysql -u root -p123

Tôi đã tạo một người dùng mới gọi là repl. Tôi để trống máy chủ, vì vậy người dùng mới có thể có quyền truy cập từ bất kỳ vị trí nào.

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

Tôi đã kiểm tra bảng người dùng để xác minh người dùng mới thay thế đã được tạo đúng.

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)

Sau đó tôi thoát, cố gắng đăng nhập như người dùng thay thế, nhưng quyền truy cập bị từ chối.

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:~$ 

Tại sao truy cập bị từ chối?


Tôi vừa thử thả người dùng và tạo với máy chủ localhost, và điều này đã hoạt động. TẠO NGƯỜI DÙNG 'thay thế' @ 'localhost' được xác định bởi '123'; Nhưng tôi không muốn giới hạn người dùng ở một số máy chủ, tôi muốn có bất kỳ máy chủ nào.
davidjhp

Câu trả lời:


5

Lý do bạn không thể đăng nhập là repl@'%'phải làm với giao thức xác thực người dùng của MySQL . Nó không bao gồm các mẫu của người dùng như người ta tin.

Nhìn vào cách bạn đã cố gắng đăng nhập

mysql -u repl -p123

Vì bạn không chỉ định địa chỉ IP, mysql giả sử máy chủ là localhost và cố gắng kết nối qua tệp ổ cắm. Đây là lý do tại sao thông báo lỗi nói Access denied for user 'repl'@'localhost' (using password: YES).

Một người sẽ nghĩ repl@'%'sẽ cho phép repl@localhost. Theo cách MySQL thực hiện xác thực người dùng , điều đó sẽ không bao giờ xảy ra. Sẽ làm điều này giúp?

mysql -u repl -p123 -h127.0.0.1

Tin hay không, mysql sẽ thử repl@localhostlại. Tại sao? Máy khách mysql nhìn thấy 127.0.0.1và thử lại tệp socket.

Hãy thử nó như thế này:

mysql -u repl -p123 -h127.0.0.1 --protocol=tcp

Điều này sẽ buộc máy khách mysql sử dụng giao thức TCP / IP một cách rõ ràng. Nó sẽ không có lựa chọn nào khác ngoài người dùng repl@'%'.


4

Bạn nên phát hành cho localhost cụ thể cho nó.

  GRANT USAGE ON *.* TO 'repl'@'localhost' IDENTIFIED BY '123';

Và thử kết nối.


1

Vấn đề là hai tài khoản này, được thêm vào theo mặc định.

http://dev.mysql.com/doc/refman/5.5/en/default-priv đặc biệt.html

+-----------+------------------+-------------------------------------------+
| host      | user             | password                                  |
+-----------+------------------+-------------------------------------------+
| localhost |                  |                                           |
| server1   |                  |                                           |
+-----------+------------------+-------------------------------------------+

Tên người dùng trống là ký tự đại diện, vì vậy cho dù bạn sử dụng tài khoản nào, nó sẽ khớp với người dùng này nếu MySQL nghĩ bạn đang kết nối từ localhost hoặc tên máy chủ cục bộ của bạn (server1 trong trường hợp này) ... vì họ không có mật khẩu, bất kỳ mật khẩu bạn thử là sai. Xác thực người dùng chỉ thử kết quả khớp đầu tiên, vì vậy người dùng bạn đã tạo không bao giờ được chú ý khi máy chủ của bạn là localhost (hoặc tên máy chủ của bạn).

Xóa hai cái này khỏi mysql. userbàn rồi FLUSH PRIVILEGES;.

Hoặc, tập lệnh mysql_secure_installation có thể làm điều này cho bạn, mặc dù tôi có xu hướng thích làm việc thủ công hơn.

http://dev.mysql.com/doc/refman/5.5/en/mysql-secure-installation.html


0

Đảm bảo rằng tất cả các trường trong trình kết nối được thiết lập với các chi tiết chính xác

host = "localhost", user = "CorrectUser", passwd = "coRrectPasswd", cơ sở dữ liệu = "CorreCTDB"

Kiểm tra các lỗi viết hoa và viết thường - 1045 không phải là lỗi Cú pháp, nhưng phải thực hiện với các chi tiết không chính xác trong trình kết nối


0

Cơ sở dữ liệu có thể chưa được cấu hình nhưng chỉ thực hiện cuộc gọi không có đối số:

mysql <enter>

Server version: xxx

Copyright (c) xxx

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

Mysql [(none)]> 

Nếu Mysql phải được đặt mật khẩu gốc, bạn có thể sử dụng

mysql_secure_installation

-2

Đây có thể là một vấn đề với tham nhũng cơ sở dữ liệu mysql của bạn. Các bảng bên trong cơ sở dữ liệu mysql như bảng người dùng có thể bị hỏng và có thể gây ra.

Vui lòng kiểm tra

myisamchk / var / lib / mysql / mysql / * .MYI

Thông thường trong khi kiểm tra hoặc sửa chữa các bảng myisam, chúng tôi muốn đưa mysql xuống trước. Nếu vấn đề này vẫn không được giải quyết, xin hãy thử nó.

Nếu chúng bị hỏng thì bạn có thể sửa chúng bằng

myisamchk --silent - Force --fast /path/table-name.MYI

Cảm ơn,

Masood

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.