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

Je suis en train de mettre en place un nouveau serveur et je rencontre toujours ce problème.

Lorsque j'essaie de me connecter à la base de données MySQL avec l'utilisateur root, j'obtiens l'erreur suivante :

ERROR 1698 (28000) : Accès refusé pour l'utilisateur 'root'@'localhost&#39 ;

Peu importe que je me connecte via le terminal (SSH), via PHPMyAdmin ou un client MySQL, par exemple Navicat. Ils échouent tous.

J'ai regardé dans la table mysql.user et j'obtiens ce qui suit :

+------------------+-------------------+
| user             | host              |
+------------------+-------------------+
| root             | %                 |
| root             | 127.0.0.1         |
| amavisd          | localhost         |
| debian-sys-maint | localhost         |
| iredadmin        | localhost         |
| iredapd          | localhost         |
| mysql.sys        | localhost         |
| phpmyadmin       | localhost         |
| root             | localhost         |
| roundcube        | localhost         |
| vmail            | localhost         |
| vmailadmin       | localhost         |
| amavisd          | test4.folkmann.it |
| iredadmin        | test4.folkmann.it |
| iredapd          | test4.folkmann.it |
| roundcube        | test4.folkmann.it |
| vmail            | test4.folkmann.it |
| vmailadmin       | test4.folkmann.it |
+------------------+-------------------+

Comme vous pouvez le voir, root devrait avoir l'accès.

Le serveur est assez simple, car j'ai essayé de résoudre ce problème depuis un moment maintenant...

Il tourne sous Ubuntu 16.04.1 LTS avec Apache, MySQL et PHP, pour pouvoir héberger des sites web, et iRedMail 0.9.5-1, pour pouvoir héberger du courrier.

La connexion à la base de données MySQL fonctionne bien avant que j'installe iRedMail. J'ai également essayé d'installer simplement iRedMail, mais en tant que root, cela ne fonctionne pas non plus...

Si quelqu'un pouvait me dire comment résoudre mon problème de connexion à MySQL ou comment installer iRedMail par-dessus une installation MySQL existante. Et oui, j'ai essayé les [Conseils d'installation][1] et je ne trouve pas ces variables dans les fichiers de configuration.

[1] : https://code.google.com/archive/p/iredmail/wikis/Installation_Tips.wiki

Solution

Sur certains systèmes comme Ubuntu, mysql utilise par défaut le [plugin UNIX auth_socket][1].

En gros, cela signifie que : les utilisateurs de la base de données qui l'utilisent, seront "auth&quot ; par l'utilisateur système crédentias. Vous pouvez voir si votre utilisateur root est configuré comme cela en faisant ce qui suit :

$ sudo mysql -u root # I had to use "sudo" since is 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, l'utilisateur root utilise le plugin auth_socket.

Il y a deux façons de résoudre ce problème :

  1. Vous pouvez configurer l'utilisateur root pour utiliser le plugin mysql_native_password.
  2. Vous pouvez créer un nouvel db_user avec votre system_user (recommandé).

Option 1

$ sudo mysql -u root # I had to use "sudo" since is new installation

mysql> USE mysql;
mysql> UPDATE user SET plugin='mysql_native_password' WHERE User='root';
mysql> FLUSH PRIVILEGES;
mysql> exit;

$ service mysql restart

Option 2: (remplacer 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 '';
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;

$ service mysql restart

Rappelez-vous que si vous utilisez l'option 2, vous devrez vous connecter à mysql avec votre nom d'utilisateur système (mysql -u VOTRE_USER_SYSTEM).

Note: Sur certains systèmes (par exemple, Debian stretch) le plugin 'auth_socket&#39 ; est appelé 'unix_socket&#39 ;, donc la commande SQL correspondante devrait être : UPDATE user SET plugin='unix_socket&#39 ; WHERE User='YOUR_SYSTEM_USER';

[1] : https://dev.mysql.com/doc/mysql-security-excerpt/5.5/en/socket-pluggable-authentication.html

Mise à jour: D'après le commentaire de @andy's, il semble que mysql 8.x.x ait mis à jour/remplacé le auth_socket pour caching_sha2_password. Je n'ai pas de système configuré avec mysql 8.x.x pour tester cela, mais les étapes ci-dessus devraient vous aider à comprendre le problème. Voici la réponse :

Une modification apportée à MySQL 8.0.4 est que le nouveau plugin d'authentification par défaut est 'caching_sha2_password&#39 ;. Le nouveau 'YOUR_SYSTEM_USER&#39 ; aura ce plugin d'authentification et vous pouvez maintenant vous connecter depuis le shell bash avec "mysql -u YOUR_SYSTEM_USER -p&quot ; et fournir le mot de passe de cet utilisateur à l'invite. L'étape "UPDATE user SET plugin&quot ; n'est pas nécessaire. Pour la mise à jour du plugin d'authentification par défaut de la version 8.0.4, voir https://mysqlserverteam.com/mysql-8-0-4-new-default-authentication-plugin-caching_sha2_password/.

Commentaires (23)

Je vous suggère de supprimer la connexion Mysql.

UPDATE - Ceci est pour Mysql version 5.5, si votre version est différente, veuillez modifier la première ligne en conséquence.

sudo apt-get purge mysql-server mysql-client mysql-common mysql-server-core-5.5 mysql-client-core-5.5
sudo rm -rf /etc/mysql /var/lib/mysql
sudo apt-get autoremove
sudo apt-get autoclean

Et installez à nouveau, mais cette fois, définissez vous-même un mot de passe root. Cela vous épargnera beaucoup d'efforts.

sudo apt-get update
sudo apt-get install mysql-server
Commentaires (3)

Vous voulez accéder à MySQL avec l'utilisateur root mais vous ne fournissez pas le mot de passe correct de root.

Si vous devez définir un nouveau mot de passe pour root, le site de MySQL propose une excellente documentation sur la façon de procéder : http://dev.mysql.com/doc/refman/5.7/en/resetting-permissions.html.

Je ne montrerai pas le processus ici car la documentation de MySQL sur le lien ci-dessus est claire et concise.

Commentaires (3)