Nói tóm lại, trên MariaDB
UPDATE mysql.user SET plugin = 'mysql_native_password',
Password = PASSWORD('NEWPASSWORD') WHERE User = 'root';
nơi bạn thay thế NEWPASSWORD bằng mật khẩu bạn muốn và mọi thứ khác nguyên văn.
Vấn đề ở đây là khi MariaDB hoặc MySQL được cài đặt / cập nhật (đặc biệt nếu tại một số điểm gốc được đặt mà không có mật khẩu) thì trong bảng Người dùng mật khẩu thực sự trống (hoặc bị bỏ qua) và việc đăng nhập phụ thuộc vào người dùng hệ thống tương ứng cho người dùng MySQL. Bạn có thể kiểm tra điều này như sau bằng cách chuyển sang root hệ thống, sau đó gõ:
mysql -uroot -p
Sau đó nhập không có mật khẩu hoặc mật khẩu sai . Bạn có thể sẽ cho phép. (Thậm chí bạn có thể đăng nhập từ root unix chỉ bằng cách # mysql
mật khẩu không liên quan và người dùng được xác định).
Vậy chuyện gì đang xảy ra? Vâng, nếu bạn đăng nhập với quyền root và làm như sau:
select User,host,plugin from mysql.user;
+----------------+-----------+-----------------------+
| User | host | plugin |
+----------------+-----------+-----------------------+
| root | localhost | auth_socket |
+----------------+-----------+-----------------------+
bạn sẽ lưu ý auth_socket
(có thể đọc unix_socket
trên MariaDB). Các socket này bỏ qua mật khẩu và cho phép người dùng Unix tương ứng vào mà không cần kiểm tra mật khẩu. Đây là lý do tại sao bạn có thể đăng nhập bằng root nhưng không phải với người dùng khác.
Vì vậy, giải pháp là cập nhật Người dùng để không sử dụng auth_socket/unix_socket
và đặt mật khẩu đúng cách.
Trên MariaDB (<10.2, xem các bình luận bên dưới) trên Ubuntu phiên bản 16 kể từ năm 2017, điều này là đủ. NEWPASSWORD là mật khẩu của bạn. mysql_native_password
bạn gõ nguyên văn.
UPDATE mysql.user SET plugin = 'mysql_native_password', Password = PASSWORD('NEWPASSWORD') WHERE User = 'root';
(Có thể cài đặt plugin thành trống sẽ hoạt động. YMMV. Tôi đã không thử điều này. Vì vậy, đây là một giải pháp thay thế.)
UPDATE mysql.user SET plugin = '', Password = PASSWORD('NEWPASSWORD') WHERE User = 'root';
Nếu không thì:
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'NEWPASSWORD';
Sau đó
FLUSH PRIVILEGES;
Đối với bản ghi, giải pháp liên quan đến việc xóa người dùng và tạo lại nó với '%' khiến tôi hoàn toàn bị khóa khỏi cơ sở dữ liệu và có thể gây ra các vấn đề khác trừ khi bạn nhận được grant
chính xác câu lệnh - dễ dàng hơn để cập nhật root bạn đã có.
Theo kinh nghiệm của tôi, vấn đề chỉ xảy ra với người dùng root, vì những người dùng khác sẽ được thêm thủ công không phải là một phần của cài đặt / cập nhật ban đầu.