Erreur MySQL # 1133-impossible de trouver une ligne correspondante dans la table utilisateur

Impossible de définir le mot de passe pour un utilisateur en utilisant 3.5.2.2-phpMyAdmin pour 5.5.27-MySQL. Lorsque vous essayez de définir le mot de passe lorsque vous êtes connecté à phpMyAdmin en tant qu'utilisateur, l'erreur suivante apparaît:

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

Lorsque vous êtes connecté en tant que root, après mot de passe défini avec succès message apparaît.

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

Dans les deux cas, le mot de passe ne se définit pas et reste tel qu'il est actuellement, vide.

42
demandé sur guaka 2012-10-14 02:08:00

8 réponses

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 particulier, qui était répertorié dans mysql.table utilisateur. Dans mon cas, il a été corrigé en exécutant

FLUSH PRIVILEGES;

La documentation de cette commande indique

Recharge les privilèges des tables grant dans la base de données mysql.

Le serveur met en cache des informations en mémoire à la suite de GRANT et CREATE USER déclaration. Cette mémoire n'est pas libérée par les instructions utilisateur REVOKE et DROP correspondantes, donc pour un serveur qui exécute de nombreuses instances des instructions qui provoquent la mise en cache, il y aura une augmentation de l'utilisation de la mémoire. Cette mémoire en cache peut être libérée avec des privilèges de vidage.

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.

83
répondu pdg137 2013-07-02 22:23:21

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 prises:

  1. connectez-vous à mysql en tant que root: mysql -uroot -pYOUR_ROOT_PASS
  2. changer pour la base de données' 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 de vidage: FLUSH PRIVILEGES;

Fait!! Il a travaillé pour moi.

9
répondu e.thompsy 2016-01-22 11:08:11

Il s'avère, 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 en fait pas et même s'il y en avait un spécifié dans la table des utilisateurs dans MySql, config.Inc.fichier php autorisé l'authentification sans mot de passe.

Solution:

Le Changement suivant la valeur de false dans le config.Inc.php .

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

Alors qu'il lit

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

Le Changement utilisateur host de Any ou % pour localhost dans MySql table des utilisateurs. Cela pourrait facilement être réalisé via la consolephpMyAdmin .

Ces deux modifications m'ont permis de m'authentifier en tant qu'utilisateur avec son mot de passe et d'interdire l'authentification sans mot de passe.

Il a également permis à l'utilisateur de changer son mot de passe lors de la connexion utilisateur.

Semble toutes les autorisations et le reste a été corrigé avec ces deux changements.

5
répondu Tumharyyaaden 2012-10-14 19:18:07

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

Ce N'est pas clair pour moi ce que MySQL considère comme un utilisateur non existant. Mais je soupçonne que MySQL considère qu'un utilisateur existe s'il peut être trouvé par un nom (colonne User) et un hôte (colonne Host) dans la table user.

Si, en essayant 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 pas un mot de passe, puis l'erreur produire.

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

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

C'est parce que, aucun mot de passe n'étant spécifié, MySQL ne peut pas créer un nouvel utilisateur, et essaie donc de trouver un utilisateur existant. Mais aucun utilisateur avec le nom myuser et l'hôte xxx.xxx.xxx.xxx ne peut être trouvé dans la table user.

Alors que fournir un mot de passe, permet à l'instruction d'être exécutée avec succès:

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

Assurez-vous de réutiliser le même mot de passe de l'utilisateur que vous considérez existe, si cette nouvelle "MySQL user" est le même "utilisateur d'application".

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

flush privileges;
5
répondu Stephane 2017-11-20 11:34:26

Si vous utilisez PHPMyAdmin, vous devez être connecté en tant que root pour pouvoir changer le mot de passe root. dans l'Utilisateur mettre root que laisser mot de passe vide que changer votre mot de passe.

0
répondu user2686848 2013-08-15 18:07:50

Tout accorder sur newdb.* à newuser @ localhost identifié par 'password';

0
répondu cmueller 2017-08-28 04:23:00

Dans mon cas, je venais de renommer L'utilisateur Mysql qui allait changer son mot de passe sur un outil db basé sur une interface graphique (DbVisualizer). Le terminal dans lequel j'ai essayé de 'définir le mot de passe' n'a pas fonctionné (erreur MySQL #1133).

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

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

-1
répondu Kayvan Tehrani 2017-05-23 12:02:37

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

Donc, vous devriez écrire:

Accorde tous les privilèges sur mydb.* à myuser@ 'xxx. xxx. xxx. xxx 'identifié par 'mypassword';

Et je pense que cela pourrait être du travail:

Définir le mot de passe pour myuser@ 'xxx. xxx. xxx. xxx 'identifié par' old_password ' = PASSWORD ('new_password');

-1
répondu user3575680 2018-01-31 10:51:08