ERROR104528000

ERROR 1045 (28000): Access denied for user 'root'@'localhost'

Cette erreur veut dire que vous n'avez plus accès au SGBDR MySQL et donc toutes les serveurs d'applications faisant appel au serveur MySQL ne fonctionne plus.

Par exemple, si vous utilisez la commande mysql_secure_installation qui permet d'améliorer la sécurité de votre installation MySQL :

Vous pouvez définir un mot de passe pour les comptes racine.
Vous pouvez supprimer des comptes root accessibles depuis l'extérieur de l'hôte local.
Vous pouvez supprimer des comptes d'utilisateurs anonymes.
Vous pouvez supprimer la base de données de test (qui par défaut est accessible par tous les utilisateurs, même les utilisateurs anonymes) et les privilèges qui permettent à quiconque d'accéder aux bases de données dont le nom commence par test_.

Bien entendu, je vous déconseille vivement d'utiliser cette commande sauf dans le cas où vous maîtrisez dans tous les sens du terme le SGBDR MySQL.

Dans le cas où vous avez l'erreur 1045 lors de la connexion au serveur SGBDR, voici la procédure à appliquer pour résoudre le problème :

  • Pour ce genre d'erreur; Vous avez juste à définir un nouveau mot de passe à l'utilisateur root en tant qu'administrateur. Suivez les étapes comme suit:
[root ~]# mysql -u root
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password:NO)
  • Arrêter le service / démon de mysql en cours d'exécution sur une CentOS 6 :
[root ~]# /etc/init.d/mysqld stop
  • Arrêter le service / démon de mysql en cours d'exécution sur une CentOS 7 :
[root ~]# systemctl stop mysqld.service
  • Démarrez mysql sans aucun privilège en utilisant l'option suivante.

Cette option est utilisée pour démarrer et n'utilise pas le système de privilèges de MySQL.

[root ~]# mysqld_safe --skip-grant-tables &

A ce moment précis, le terminal semblera s'arrêter. Laissez cela tel quel et utilisez un nouveau terminal pour les prochaines étapes.

  • Entrez la commande mysql
[root ~]# mysql -u root
mysql>
  • Corrigez le paramètre d'autorisation de l'utilisateur root :
mysql> use mysql;
Database changed
mysql> select * from user;
Empty set (0.00 sec)
mysql> truncate table user;
Query OK, 0 rows affected (0.00 sec)
mysql> flush privileges;
Query OK, 0 rows affected (0.01 sec)
mysql> grant all privileges on *.* to root@localhost identified by 'YourNewPassword' with grant option;
Query OK, 0 rows affected (0.01 sec)
  • Vérifiez la confirmation des résultats :
mysql> select host, user from user;
1 row in set (0.00 sec)
  • Quittez le shell et redémarrez mysql en mode normal :
mysql> quit;
[root ~]# kill -KILL [PID of mysqld_safe]
[root ~]# kill -KILL [PID of mysqld]
[root ~]# service mysql start

faites un ps -aef | grep myslqd_safe et un ps -aef | grep mysqld pour trouver le PID du processus

  • Vous pouvez maintenant vous connecter en tant qu'utilisateur root avec le mot de passe que vous avez défini :
[root ~]# mysql -u root -p
mysql>

Le problème est maintenant réglé concernant l'erreur 1045.