Người dùng gặp phải hành vi này trong các phiên bản MySQL / MariaDB mới hơn (ví dụ:Debian Stretch, v.v.) nên biết rằng trong bảng mysql.user, có cột được gọi là 'plugin'. Nếu plugin 'unix_socket' được bật, thì root sẽ có thể đăng nhập qua dòng lệnh mà không yêu cầu mật khẩu. Các cơ chế đăng nhập khác sẽ bị vô hiệu hóa.
Để kiểm tra xem có đúng như vậy không:
SELECT host, user, password, plugin FROM mysql.user;
sẽ trả về một cái gì đó giống như thế này (với unix_socket được bật):
+-----------+------+--------------------------+-------------+
| host | user | password | plugin |
+-----------+------+--------------------------+-------------+
| localhost | root | <redacted_password_hash> | unix_socket |
+-----------+------+--------------------------+-------------+
Để vô hiệu hóa điều đó và yêu cầu root sử dụng mật khẩu:
UPDATE mysql.user SET plugin = '' WHERE user = 'root' AND host = 'localhost';
FLUSH PRIVILEGES;
Lưu ý: Như đã lưu ý bởi @marioivangf (trong một nhận xét) trong các phiên bản MySQL mới hơn (ví dụ:5.7.x), bạn có thể cần đặt plugin thành 'mysql_native_password' (thay vì để trống).
Sau đó khởi động lại:
service mysql restart
Sự cố đã được khắc phục!:
[email protected] ~# mysql
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)
Nguồn: https://stackoverflow.com/a/44301734/3363571 Xin chân thành cảm ơn @SakuraKinomoto (hãy bình chọn câu trả lời của anh ấy nếu bạn thấy điều này hữu ích).