Niektóre systemy, takie jak Ubuntu, MySQL używa Wtyczka UNIX auth_socket domyślnie.
Zasadniczo oznacza to, że:db_users używający go, zostanie "uwierzytelniony" przez poświadczenia użytkownika systemu. Możesz sprawdzić, czy Twój root
użytkownik jest skonfigurowany w ten sposób, wykonując następujące czynności:
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 |
+------------------+-----------------------+
Jak widać w zapytaniu, root
użytkownik używa auth_socket
wtyczka.
Można to rozwiązać na dwa sposoby:
- Możesz ustawić korzeń użytkownik używa
mysql_native_password
wtyczka - Możesz utworzyć nowego
db_user
z tobąsystem_user
(zalecane)
Opcja 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
Opcja 2: (zastąp TWÓJ_UŻYTKOWNIK SYSTEMU nazwą użytkownika, którą posiadasz)
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
Pamiętaj, że jeśli użyjesz opcji nr 2, będziesz musiał połączyć się z MySQL jako swoją systemową nazwą użytkownika (mysql -u YOUR_SYSTEM_USER
).
Uwaga: W niektórych systemach (np. Debian 9
(Rozciąganie)) wtyczka 'auth_socket' nazywa się 'unix_socket'
, więc odpowiednie polecenie SQL powinno mieć postać:UPDATE user SET plugin='unix_socket' WHERE User='YOUR_SYSTEM_USER';
Z komentarza @andy'ego wynika, że MySQL 8.x.x zaktualizował/zastąpił auth_socket
dla caching_sha2_password
. Nie mam konfiguracji systemu z MySQL 8.x.x, aby to przetestować. Powyższe kroki powinny jednak pomóc w zrozumieniu problemu. Oto odpowiedź:
Jedną zmianą w MySQL 8.0.4 jest to, że nową domyślną wtyczką uwierzytelniającą jest „caching_sha2_password”. Nowy 'UŻYTKOWNIK_TWOJEGO_SYSTEMU' będzie miał tę wtyczkę uwierzytelniającą i możesz teraz zalogować się z powłoki Bash za pomocą "mysql -u UŻYTKOWNIK_TWOJEGO_SYSTEMU -p" i podać hasło dla tego użytkownika w wierszu polecenia. Nie ma potrzeby wykonywania kroku „AKTUALIZUJ wtyczkę użytkownika SET”.
Aby zapoznać się z aktualizacją domyślnej wtyczki uwierzytelniania 8.0.4, zobacz https://mysqlserverteam.com/mysql-8-0-4-new-default-authentication-plugin-caching_sha2_password/