Nogle systemer som Ubuntu, MySQL bruger UNIX auth_socket plugin som standard.
Grundlæggende betyder det, at:db_users, der bruger det, vil blive "godkendt" af systembrugerens legitimationsoplysninger. Du kan se, om din root
bruger er sat op på denne måde ved at gøre følgende:
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 forespørgslen, er root
brugeren bruger auth_socket
plugin.
Der er to måder at løse dette på:
- Du kan indstille roden bruger til at bruge
mysql_native_password
plugin - Du kan oprette en ny
db_user
med digsystem_user
(anbefalet)
Mulighed 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
Mulighed 2: (erstat YOUR_SYSTEM_USER med det brugernavn, 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
Husk, at hvis du bruger mulighed #2, bliver du nødt til at oprette forbindelse til MySQL som dit systembrugernavn (mysql -u YOUR_SYSTEM_USER
).
Bemærk: På nogle systemer (f.eks. Debian 9
(Stretch)) 'auth_socket'-pluginnet hedder 'unix_socket'
, så den tilsvarende SQL-kommando skal være:UPDATE user SET plugin='unix_socket' WHERE User='YOUR_SYSTEM_USER';
Fra @andys kommentar ser det ud til, at MySQL 8.x.x har opdateret/erstattet auth_socket
for caching_sha2_password
. Jeg har ikke en systemopsætning med MySQL 8.x.x til at teste dette. Ovenstående trin skal dog hjælpe dig med at forstå problemet. Her er svaret:
En ændring fra og med MySQL 8.0.4 er, at det nye standardgodkendelsesplugin er 'caching_sha2_password'. Den nye 'YOUR_SYSTEM_USER' vil have dette autentificerings-plugin, og du kan logge ind fra Bash-skallen nu med "mysql -u YOUR_SYSTEM_USER -p" og angive adgangskoden til denne bruger ved prompten. Der er ikke noget behov for trinnet "OPDATERING bruger SET plugin".
For 8.0.4 standardgodkendelsespluginopdateringen, se https://mysqlserverteam.com/mysql-8-0-4-new-default-authentication-plugin-caching_sha2_password/