Alcuni sistemi come Ubuntu, MySQL utilizza Plugin auth_socket di UNIX per impostazione predefinita.
Fondamentalmente significa che:db_users che lo utilizza, sarà "autenticato" dalle credenziali dell'utente di sistema. Puoi vedere se il tuo root
l'utente è configurato in questo modo effettuando le seguenti operazioni:
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 |
+------------------+-----------------------+
Come puoi vedere nella query, la root
l'utente sta usando auth_socket
plug-in.
Ci sono due modi per risolverlo:
- Puoi impostare la root utente di utilizzare la
mysql_native_password
plug-in - Puoi creare un nuovo
db_user
con tesystem_user
(consigliato)
Opzione 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
Opzione 2: (sostituisci YOUR_SYSTEM_USER con il nome utente che hai)
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
Ricorda che se usi l'opzione n. 2 dovrai connetterti a MySQL come nome utente di sistema (mysql -u YOUR_SYSTEM_USER
).
Nota: Su alcuni sistemi (ad es. Debian 9
(Stretch)) il plugin 'auth_socket' si chiama 'unix_socket'
, quindi il comando SQL corrispondente dovrebbe essere:UPDATE user SET plugin='unix_socket' WHERE User='YOUR_SYSTEM_USER';
Dal commento di @andy sembra che MySQL 8.x.x abbia aggiornato/sostituito auth_socket
per caching_sha2_password
. Non ho una configurazione di sistema con MySQL 8.x.x per testarlo. Tuttavia, i passaggi precedenti dovrebbero aiutarti a comprendere il problema. Ecco la risposta:
Una modifica a partire da MySQL 8.0.4 è che il nuovo plug-in di autenticazione predefinito è 'caching_sha2_password'. Il nuovo "YOUR_SYSTEM_USER" avrà questo plug-in di autenticazione e puoi accedere dalla shell Bash ora con "mysql -u YOUR_SYSTEM_USER -p" e fornire la password per questo utente al prompt. Non è necessario il passaggio "UPDATE user SET plug-in".
Per l'aggiornamento del plug-in di autenticazione predefinito 8.0.4, vedere https://mysqlserverteam.com/mysql-8-0-4-new-default-authentication-plugin-caching_sha2_password/