Certains systèmes comme Ubuntu, MySQL utilisent le Plug-in UNIX auth_socket par défaut.
En gros, cela signifie que :db_users l'utilisant seront "authentifiés" par les informations d'identification de l'utilisateur système. Vous pouvez voir si votre root
l'utilisateur est configuré comme ceci en procédant comme suit :
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 |
+------------------+-----------------------+
Comme vous pouvez le voir dans la requête, la root
l'utilisateur utilise le auth_socket
plugin.
Il existe deux façons de résoudre ce problème :
- Vous pouvez définir la racine user pour utiliser le
mysql_native_password
plugin - Vous pouvez créer un nouveau
db_user
avec voussystem_user
(recommandé)
Option 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
Option 2 : (remplacez YOUR_SYSTEM_USER par le nom d'utilisateur que vous avez)
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
N'oubliez pas que si vous utilisez l'option 2, vous devrez vous connecter à MySQL avec votre nom d'utilisateur système (mysql -u YOUR_SYSTEM_USER
).
Remarque : Sur certains systèmes (par exemple, Debian 9
(Stretch)) le plugin 'auth_socket' s'appelle 'unix_socket'
, la commande SQL correspondante doit donc être :UPDATE user SET plugin='unix_socket' WHERE User='YOUR_SYSTEM_USER';
D'après le commentaire de @andy, il semble que MySQL 8.x.x a mis à jour/remplacé le auth_socket
pour caching_sha2_password
. Je n'ai pas de configuration système avec MySQL 8.x.x pour tester cela. Cependant, les étapes ci-dessus devraient vous aider à comprendre le problème. Voici la réponse :
Un changement depuis MySQL 8.0.4 est que le nouveau plugin d'authentification par défaut est 'caching_sha2_password'. Le nouveau 'YOUR_SYSTEM_USER' aura ce plugin d'authentification et vous pouvez maintenant vous connecter depuis le shell Bash avec "mysql -u YOUR_SYSTEM_USER -p" et fournir le mot de passe pour cet utilisateur à l'invite. L'étape "UPDATE user SET plugin" n'est pas nécessaire.
Pour la mise à jour du plugin d'authentification par défaut 8.0.4, voir https://mysqlserverteam.com/mysql-8-0-4-new-default-authentication-plugin-caching_sha2_password/