Một số hệ thống như Ubuntu, MySQL đang sử dụng Plugin auth_socket UNIX theo mặc định.
Về cơ bản, điều đó có nghĩa là: db_users sử dụng nó, sẽ được "xác thực" bởi thông tin đăng nhập của người dùng hệ thống. Bạn có thể xem nếu root
của mình người dùng được thiết lập như vậy bằng cách thực hiện như sau:
sudo mysql -u root # I had to use "sudo" since it was a new installation
mysql> USE mysql;
mysql> SELECT User, Host, plugin FROM mysql.user;
+------------------+-----------------------+
| User | plugin |
+------------------+-----------------------+
| root | auth_socket |
| mysql.sys | mysql_native_password |
| debian-sys-maint | mysql_native_password |
+------------------+-----------------------+
Như bạn có thể thấy trong truy vấn, root
người dùng đang sử dụng auth_socket
plugin.
Có hai cách để giải quyết vấn đề này:
- Bạn có thể đặt root người dùng sử dụng
mysql_native_password
plugin - Bạn có thể tạo một
db_user
mới với bạnsystem_user
(khuyến nghị)
Tùy chọn 1:
sudo mysql -u root # I had to use "sudo" since it was new installation
mysql> USE mysql;
mysql> UPDATE user SET plugin='mysql_native_password' WHERE User='root';
mysql> FLUSH PRIVILEGES;
mysql> exit;
sudo service mysql restart
Tùy chọn 2: (thay thế YOUR_SYSTEM_USER bằng tên người dùng bạn có)
sudo mysql -u root # I had to use "sudo" since is new installation
mysql> USE mysql;
mysql> CREATE USER 'YOUR_SYSTEM_USER'@'localhost' IDENTIFIED BY 'YOUR_PASSWD';
mysql> GRANT ALL PRIVILEGES ON *.* TO 'YOUR_SYSTEM_USER'@'localhost';
mysql> UPDATE user SET plugin='auth_socket' WHERE User='YOUR_SYSTEM_USER';
mysql> FLUSH PRIVILEGES;
mysql> exit;
sudo service mysql restart
Hãy nhớ rằng nếu bạn sử dụng tùy chọn số 2, bạn sẽ phải kết nối với MySQL làm tên người dùng hệ thống của mình (mysql -u YOUR_SYSTEM_USER
).
Lưu ý: Trên một số hệ thống (ví dụ: Debian 9
(Stretch)) plugin 'auth_socket' được gọi là 'unix_socket'
, vì vậy lệnh SQL tương ứng phải là:UPDATE user SET plugin='unix_socket' WHERE User='YOUR_SYSTEM_USER';
Từ nhận xét của @ andy, có vẻ như MySQL 8.x.x đã cập nhật / thay thế auth_socket
cho caching_sha2_password
. Tôi không có thiết lập hệ thống với MySQL 8.x.x để kiểm tra điều này. Tuy nhiên, các bước trên sẽ giúp bạn hiểu vấn đề. Đây là câu trả lời:
Một thay đổi kể từ MySQL 8.0.4 là plugin xác thực mặc định mới là 'caching_sha2_password'. 'YOUR_SYSTEM_USER' mới sẽ có plugin xác thực này và bạn có thể đăng nhập từ Bash shell ngay bây giờ bằng "mysql -u YOUR_SYSTEM_USER -p" và cung cấp mật khẩu cho người dùng này khi được nhắc. Không cần đến bước "CẬP NHẬT người dùng ĐẶT plugin".
Đối với bản cập nhật plugin xác thực mặc định 8.0.4, hãy xem https://mysqlserverteam.com/mysql-8-0-4-new-default-authentication-plugin-caching_sha2_password/