Mysql
 sql >> Base de données >  >> RDS >> Mysql

ERREUR 1698 (28000) :Accès refusé pour l'utilisateur 'root'@'localhost'

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 :

  1. Vous pouvez définir la racine user pour utiliser le mysql_native_password plugin
  2. Vous pouvez créer un nouveau db_user avec vous system_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/