Vissa system som Ubuntu, MySQL använder UNIX auth_socket plugin som standard.
I grund och botten betyder det att:db_users som använder det, kommer att "autentiseras" av systemanvändarens autentiseringsuppgifter. Du kan se om din root
användaren ställs in så här genom att göra följande:
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 |
+------------------+-----------------------+
Som du kan se i frågan, root
användaren använder auth_socket
plugin.
Det finns två sätt att lösa detta:
- Du kan ställa in roten användaren att använda
mysql_native_password
plugin - Du kan skapa en ny
db_user
med digsystem_user
(rekommenderas)
Alternativ 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
Alternativ 2: (ersätt YOUR_SYSTEM_USER med det användarnamn du har)
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
Kom ihåg att om du använder alternativ #2 måste du ansluta till MySQL som ditt systemanvändarnamn (mysql -u YOUR_SYSTEM_USER
).
Obs! På vissa system (t.ex. Debian 9
(Stretch)) 'auth_socket' plugin kallas 'unix_socket'
, så motsvarande SQL-kommando bör vara:UPDATE user SET plugin='unix_socket' WHERE User='YOUR_SYSTEM_USER';
Från @andys kommentar verkar det som att MySQL 8.x.x har uppdaterat/ersatt auth_socket
för caching_sha2_password
. Jag har ingen systeminstallation med MySQL 8.x.x för att testa detta. Men stegen ovan bör hjälpa dig att förstå problemet. Här är svaret:
En förändring från och med MySQL 8.0.4 är att det nya standardinsticksprogrammet för autentisering är 'caching_sha2_password'. Den nya 'YOUR_SYSTEM_USER' kommer att ha denna autentiseringsplugin och du kan logga in från Bash-skalet nu med "mysql -u YOUR_SYSTEM_USER -p" och ange lösenordet för denna användare på prompten. Det finns inget behov av "UPDATE user SET plugin"-steget.
För 8.0.4 standardautentiseringspluginuppdateringen, se https://mysqlserverteam.com/mysql-8-0-4-new-default-authentication-plugin-caching_sha2_password/