Erreur MySQL # 1133 – Impossible de trouver une ligne correspondante dans la table utilisateur

Impossible de définir le mot de passe pour un utilisateur utilisant 3.5.2.2 – phpMyAdmin pour 5.5.27 – MySQL . Lorsque vous essayez de définir le mot de passe alors que vous êtes connecté à phpMyAdmin tant qu’utilisateur, le message d’erreur suivant s’affiche:

 #1133 - Can't find any matching row in the user table 

Une fois connecté en tant que root, le mot de passe suivant défini correctement s’affiche.

 SET PASSWORD FOR 'user'@'%' = PASSWORD( '***' ) 

Dans les deux cas, le mot de passe n’est pas défini et rest tel quel, vide.

J’ai rencontré cette erreur en utilisant MySQL dans un contexte différent (pas dans phpMyAdmin). Les commandes GRANT et SET PASSWORD ont échoué sur un utilisateur existant, répertorié dans la table mysql.user. Dans mon cas, il a été corrigé en courant

 FLUSH PRIVILEGES; 

La documentation de cette commande indique

Recharge les privilèges des tables d’atsortingbution dans la firebase database mysql.

Le serveur met en cache les informations en mémoire à la suite des instructions GRANT et CREATE USER. Cette mémoire n’est pas libérée par les instructions REVOKE et DROP USER correspondantes. Par conséquent, pour un serveur qui exécute de nombreuses instances des instructions à l’origine de la mise en cache, l’utilisation de la mémoire augmente. Cette mémoire en cache peut être libérée avec des privilèges FLUSH.

Apparemment, le cache de la table utilisateur avait atteint un état incohérent, provoquant ce message d’erreur étrange. Plus d’informations sont disponibles ici .

J’ai rencontré ce problème, mais dans mon cas, le mot de passe de l’utilisateur «phpmyadmin» ne correspondait pas au contenu de /etc/phpmyadmin/config-db.php

Une fois que j’ai mis à jour le mot de passe pour l’utilisateur ‘phpmyadmin’, l’erreur a disparu.

Ce sont les étapes que j’ai sockets:

  1. Connectez-vous à mysql en tant que root: mysql -uroot -pYOUR_ROOT_PASS
  2. Passez à la firebase database mysql: use mysql;
  3. Mettez à jour le mot de passe de l’utilisateur ‘phpmyadmin’: UPDATE mysql.user SET Password=PASSWORD('YOUR_PASS_HERE') WHERE User='phpmyadmin' AND Host='localhost';
  4. Privilèges Flush: FLUSH PRIVILEGES;

TERMINÉ!! Cela a fonctionné pour moi.

Il s’avère que l’erreur est très vague en effet!

1) Le mot de passe était défini lors de la connexion en tant que root, car il mettait à jour le champ user / password dans la table users sous MySql.

2) Une fois connecté en tant qu’utilisateur, le mot de passe ne changeait pas et même s’il y en avait un dans le tableau des utilisateurs de MySQL, le fichier config.inc.php autorisait l’authentification sans mot de passe.

Solution:

Changez la valeur suivante en false dans le fichier config.inc.php .

 $cfg['Servers'][$i]['AllowNoPassword'] = true; 

Alors qu’il lit

 $cfg['Servers'][$i]['AllowNoPassword'] = false; 

Remplacez l’ hôte de l’utilisateur par Any ou % en localhost dans la table des utilisateurs MySql. Cela pourrait facilement être réalisé via la console phpMyAdmin .

Ces deux modifications m’ont permis de m’authentifier en tant qu’utilisateur avec son mot de passe et son authentification non autorisée sans mot de passe.

Il a également permis à l’utilisateur de modifier son mot de passe lors de sa connexion en tant qu’utilisateur.

Semble toutes les permissions et le rest a été corrigé avec ces deux modifications.

Cette erreur peut se produire si vous essayez d’accorder des privilèges à un utilisateur non existant.

Je ne vois pas ce que MySQL considère comme un utilisateur non existant. Mais je soupçonne que MySQL considère un utilisateur comme existant s’il peut être trouvé par un nom (colonne User ) et un hôte (colonne Host ) dans la table user .

Si vous essayez d’accorder des privilèges à un utilisateur qui peut être trouvé avec son nom (colonne User ) mais pas par son nom et son hôte (colonnes User et Host ), et ne pas fournir de mot de passe, l’erreur se produit.

Par exemple, l’instruction suivante déclenche l’erreur:

 grant all privileges on mydb.* to myuser@'xxx.xxx.xxx.xxx'; 

En effet, aucun mot de passe n’étant spécifié, MySQL ne peut pas créer un nouvel utilisateur, et tente donc de trouver un utilisateur existant. Mais aucun utilisateur avec le nom myuser et l’hôte xxx.xxx.xxx.xxx ne se trouve dans la table user .

Considérant que fournir un mot de passe, permet à l’instruction d’être exécuté avec succès:

 grant all privileges on mydb.* to myuser@'xxx.xxx.xxx.xxx' identified by 'mypassword'; 

Veillez à réutiliser le même mot de passe de l’utilisateur que vous considérez comme existant, si ce nouvel “utilisateur MySQL” est le même “utilisateur de l’application”.

Terminez l’opération en vidant les privilèges:

 flush privileges; 

Si vous utilisez PHPMyAdmin, vous devez être connecté en tant que root pour pouvoir modifier le mot de passe root. dans l’utilisateur mettez la racine que laisser le mot de passe vide pour changer votre mot de passe.

accorder tout sur newdb. * à newuser @ localhost identifié par ‘password’;

Dans mon cas, je venais de renommer l’utilisateur Mysql qui allait changer son mot de passe sur un outil de firebase database basé sur l’interface graphique (DbVisualizer). Le terminal dans lequel j’ai essayé de ‘SET PASSWORD’ n’a pas fonctionné (MySQL Error # 1133).

Cependant, cette réponse a fonctionné pour moi, même après avoir changé le mot de passe, la commande ‘SET PASSWORD’ ne fonctionnait pas encore.

Après avoir fermé le terminal et en avoir ouvert un nouveau, la commande a très bien fonctionné.

Je pense que la réponse est ici maintenant: https://bugs.mysql.com/bug.php?id=83822

Donc, vous devriez écrire:

Accorder tous les privilèges sur mydb. * À myuser@’xxx.xxx.xxx.xxx ‘IDENTIFIÉ PAR’ mypassword ‘;

Et je pense que cela pourrait être du travail:

SET PASSWORD FOR myuser@’xxx.xxx.xxx.xxx ‘IDENTIFIED BY’ old_password ‘= MOT DE PASSE (‘ new_password ‘);