Không thể đăng nhập với người dùng đã tạo trong mysql


77

Sử dụng lệnh này

GRANT ALL PRIVILEGES ON *.* to 'brian'@'%' identified by 'password';

Tôi cố gắng đăng nhập bằng:

 mysql -u brian -ppassword

Lỗi là:

ERROR 1045 (28000): Access denied for user 'brian'@'localhost' (using password: YES)

Tôi đang làm điều này với tư cách là người chủ và tôi đã cố gắng xóa các đặc quyền.

Tôi đã thử điều này với vô số người dùng nhưng nó dường như không hoạt động. Tôi có thể tạo một người dùng không có mật khẩu và đăng nhập hoạt động. Dòng lệnh và từ phpmyadmin

Ngoài ra, hãy kiểm tra xem người dùng có ở trong mysql.user hay không.

Hiển thị tài trợ cho các chương trình brian:

| GRANT ALL PRIVILEGES ON *.* TO 'brian'@'%' IDENTIFIED BY PASSWORD '*2470C0C06DEE42FD1618BB99005ADCA2EC9D1E19' |

Hmm ... cái gì SHOW GRANTS FOR brian@ %; trở về?
Powerlord 11/09/09

Câu trả lời:


187

Bạn có thể gặp sự cố MySQL vĩnh viễn này, nơi một trong những người dùng mặc định trong bảng người dùng '' @ localhost, điều này sẽ kết thúc từ chối tất cả localhostngười dùng sau này trong bảng. Những gì tôi sẽ làm là mysqldumpcác mysqlcơ sở dữ liệu và tìm kiếm cụm từ này trong Userbảng; nếu được tìm thấy, hãy xóa nó và xóa các đặc quyền.

Để biết thêm chi tiết, hãy xem https://dev.mysql.com/doc/refman/5.5/en/connection-access.html .

Đó là một quan niệm sai lầm phổ biến khi nghĩ rằng, đối với một tên người dùng nhất định, tất cả các hàng đặt tên rõ ràng cho người dùng đó sẽ được sử dụng đầu tiên khi máy chủ cố gắng tìm một kết nối phù hợp. Đây không phải là sự thật. Ví dụ trước minh họa điều này, trong đó một kết nối từ h1.example.net của jeffrey đầu tiên không được so khớp với hàng có chứa 'jeffrey' làm giá trị cột Người dùng, mà bằng hàng không có tên người dùng. Do đó, jeffrey được xác thực là người dùng ẩn danh, mặc dù anh ta đã chỉ định tên người dùng khi kết nối.


1
Tôi có điều đó trên thực tế. có cách nào tốt hơn mà không ảnh hưởng đến hoạt động sản xuất của tôi.
Brian G

Vâng, bạn có thể di chuyển các mục mới tạo của mình trước nó, nếu bạn không muốn loại bỏ nó, tôi đoán vậy. Nhưng miễn là nó ở đó, nó sẽ tiếp tục làm điều này với người dùng mới. Nếu bạn lo lắng về việc loại bỏ nó, có lẽ bạn nên tìm hiểu các tài liệu MySQL để biết lý do tại sao nó ở đó, tôi chắc rằng có một số lý do kỳ lạ nhưng tôi không thể nhớ lại ngay bây giờ.
hỗn loạn

Bất kỳ thông tin thêm về điều này. Tôi gần như tích cực đây là vấn đề của tôi. nhưng tôi không thể tìm thấy thêm thông tin nào về nó.
Brian G

dev.mysql.com/doc/refman/5.1/en/default-privileges.html có điều gì đó về 'tài khoản ẩn danh' mà tài khoản tên người dùng trống này dường như được sử dụng. Dường như không có gì cho thấy rằng có bất kỳ nhược điểm nào khi loại bỏ chúng.
hỗn loạn

4
Nếu bạn đang sử dụng mysql trên một hệ thống Debian, cách TỐT NHẤT để giải quyết vấn đề này là thực thi mysql_secure_installation (cần có đặc quyền root).
BigBlast

46

Đây là sự cố do những người dùng ẩn danh gây ra. Sau khi cài đặt MySQL, tôi luôn chạy

shell> mysql_secure_installation 

và chọn đặt / thay đổi mật khẩu gốc, xóa người dùng ẩn danh, không cho phép đăng nhập root từ xa, xóa cơ sở dữ liệu thử nghiệm. Thao tác này sẽ xóa người dùng ẩn danh và bảo mật cài đặt của bạn. Nó cũng sẽ giải quyết vấn đề bạn có.


Nếu cảm thấy đây thực sự là câu trả lời chính xác, ít nhất là đối với bất kỳ điều gì khác ngoài cơ sở dữ liệu demo hoàn chỉnh. Theo một cách nào đó, có vẻ như mysql đang hợp lý bằng cách ngăn người dùng đăng nhập trước khi thực hiện việc này (và xóa người dùng ẩn danh), vì đây là một dấu hiệu lớn cho thấy cài đặt không an toàn.
Phil

22
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)

1
Điều này cũng làm việc cho tôi, nhưng bạn có thể giải thích logic không?
blackirishman,

2
@blackirishman Các thay đổi về đặc quyền sẽ không có hiệu lực cho đến khi bạn xóa các quyền cũ và các quyền mới được cài đặt. Tôi chắc rằng điều này sẽ được thực hiện tự động trên phpmyadmin. Điều này cũng làm việc cho tôi! Cảm ơn bạn.
logicbloke

19

Không có giải pháp nào được cung cấp ở đây hoạt động. Sau vô số lỗi và thử nghiệm, tôi nhận ra rằng tôi có các ký tự đặc biệt trong mật khẩu. Thay đổi mật khẩu không có ký tự đặc biệt đã giải quyết được vấn đề


Tôi không phải xóa các ký tự đặc biệt mà chỉ cần sử dụng tùy chọn -p để nhắc tôi nhập mật khẩu.
ccjjmartin

1
Đây là nó cho tôi. Tôi nghĩ rằng vấn đề là khi tôi đặt mật khẩu, ký tự '\' trong nó không được hiểu theo nghĩa đen, nhưng khi tôi cố gắng đăng nhập với người dùng mới, nó đã xảy ra.
jfla

Bất kỳ / tất cả / một số ký tự sau đây là thủ phạm &? ^ \
AnkitK

2
Tôi đã tìm ra khoảng trắng và nên tránh các ký tự sau "'$, [] *? {} ~ #% \ <> | ^;
Mehdi Nellen 15/11/18

Tôi đã mất nhiều tuổi để nhận ra điều này. Tôi đã sử dụng một trình tạo mật khẩu ngẫu nhiên trực tuyến để tạo ra mật khẩu chứa một trong những ký tự đặc biệt này.
BadHorsie

5

Tài liệu mysql có điều này để nói: (từ http://dev.mysql.com/doc/refman/5.1/en/adding-users.html ):

Hai trong số các tài khoản có tên người dùng montyvà mật khẩu là some_pass. Cả hai tài khoản đều là tài khoản siêu người dùng với đầy đủ đặc quyền để làm bất cứ điều gì. Các 'monty'@'localhost'tài khoản có thể được sử dụng chỉ khi kết nối từ các máy chủ địa phương. Các 'monty'@'%'tài khoản sử dụng '%'ký tự đại diện cho phần host, vì vậy nó có thể được sử dụng để kết nối từ bất kỳ máy chủ.

Cần phải có cả hai tài khoản montyđể có thể kết nối từ mọi nơi như monty. Nếu không có tài khoản localhost, tài khoản người dùng ẩn danh cho localhost được tạo bởi mysql_install_dbsẽ được ưu tiên khi monty kết nối từ máy chủ cục bộ. Kết quả là, montysẽ được coi là một người dùng ẩn danh. Lý do cho điều này là tài khoản người dùng ẩn danh có Hostgiá trị cột cụ thể hơn 'monty'@'%'tài khoản và do đó xuất hiện sớm hơn trong thứ tự sắp xếp bảng người dùng.

Với ý nghĩ này, tôi khuyên bạn nên tạo một 'brian'@'localhost'người dùng có cùng đặc quyền.


1
<sarcasm> Thật là một quyết định thiết kế đẹp </ sarcasm>!
jweyrich

2

Bạn đã quên các trích dẫn xung quanh brian trong tuyên bố tài trợ của bạn. Hãy thử nó như thế này:

GRANT ALL PRIVILEGES ON *.* to 'brian'@'%' identified by 'password';


2

Tôi nghĩ 'Russell Silva' đúng ...

Tôi đã tạo một người dùng bằng

CREATE USER 'username'@'%' PASSWORD='userpassword';

Nhưng tôi không thể đăng nhập vào tài khoản này. Bảng điều khiển cho tôi biết rằng

ERROR 1045 (28000): Access denied for user 'username'@'localhost' (using password: YES)

Vì vậy, tôi đã tạo một người dùng có cùng tên người dùng ngoại trừ việc thay đổi '%' thành 'localhost' và cuối cùng tôi có thể đăng nhập bằng 'tên người dùng'. Nó khá kỳ lạ đối với tôi.


1

Trong trường hợp của tôi, đó là do tôi đã nhấp vào "SSL: YÊU CẦU SSL" (trong phpmyadmin). Khi tôi thay đổi nó thành "YÊU CẦU KHÔNG", tôi có thể đăng nhập.


Điều này đã sửa nó cho tôi với phpmyadmin 4.5.4.1deb2ubuntu2. Chúc mừng! Chưa bao giờ gặp sự cố này với các phiên bản phpmyadmin trước mà tôi biết.
10us

1

Thay đổi mật khẩu gốc bằng lệnh này:

ALTER USER 'username'@'hostname' IDENTIFIED WITH mysql_native_password BY 'password';

0

Bạn cũng có thể kết nối từ một máy chủ lưu trữ khác và sau đó người dùng ẩn danh localhost bị bỏ qua và bạn có thể xóa nó và xóa các đặc quyền:

mysql -u brian -ppassword -h 'other_host_than_localhost'

0

Tôi đã gặp sự cố tương tự khi cố gắng kết nối với Maria DB chạy trên Ubuntu sau khi nâng cấp lên 17.04.

Mặc định là chỉ nghe trên localhost, 127.0.0.1.

Để làm cho MySQL / Maria lắng nghe trên tất cả các cổng và giao diện có sẵn, tôi cần chỉ định rõ ràng ràng buộc địa chỉ bind = 0.0.0.0. Tôi đã thêm dòng này vào cuối tệp /etc/mysql/my.cnf, tức là

...
[client-server]

# Import all .cnf files from configuration directory

!includedir /etc/mysql/conf.d/
!includedir /etc/mysql/mariadb.conf.d/
bind-address=0.0.0.0

Sau đó...

sudo /etc/init.d/mysql restart 

-1

Sự cố tương tự đã xảy ra với tôi ngay cả khi xác minh rằng tôi không nhập sai mật khẩu, tôi không thể đăng nhập. Hai bước dưới đây đã giải quyết được vấn đề của tôi.

  1. Bỏ cơ sở dữ liệu thử nghiệm
  2. Xóa người dùng ẩn danh

Dropping test databasebạn có thể đã đốt cháy toàn bộ máy tính, tôi có cảm giác nó cũng sẽ giải quyết được vấn đề ...
Sebas
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.