web-dev-qa-db-fra.com

MySQL ne laissera pas de connexion utilisateur: Erreur 1524

Server version: 5.7.10 MySQL Community Server (GPL)

Dans MySQL, j'ai un utilisateur mangues. L'utilisateur a parfaitement fonctionné lorsque je l'ai créé. Après avoir redémarré mon ordinateur, cependant, une tentative de connexion à mangues a donné cette sortie:

$ mysql -u mangos -p
Enter password: 
ERROR 1524 (HY000): Plugin '*some_random_long_hash_I_cannot_remember' is not loaded
$ 

Cela m'a en quelque sorte rappelé le hachage du mot de passe, alors après avoir enquêté sur mysql.user, j'ai découvert que mangos n'avait pas de mot de passe!

SET PASSWORD FOR 'mangos'@'127.0.0.1' = PASSWORD('mangos');
FLUSH PRIVILEGES;

Maintenant, je reçois:

ERROR 1524 (HY000): Plugin '*3FBBDB84EA2B2A0EA599948396AD622B7FF68183' is not loaded

3FBBDB84EA2B2A0EA599948396AD622B7FF68183 est le même numéro que celui indiqué dans la colonne mot de passe de mysql.user pour mangos, et est différent de celui d'origine. Je n'arrive toujours pas à me connecter.

Comment faire en sorte que MySQL reconnaisse correctement un mot de passe? Est-ce même le problème ici?

Edits:

mysql> SELECT * FROM mysql.user WHERE user = 'mangos' \G
*************************** 1. row ***************************
Host: localhost
              User: mangos
          Password: *3FBBDB84EA2B2A0EA599948396AD622B7FF68183
       Select_priv: N
       Insert_priv: N
       Update_priv: N
       Delete_priv: N
       Create_priv: N
         Drop_priv: N
       Reload_priv: N
     Shutdown_priv: N
      Process_priv: N
         File_priv: N
        Grant_priv: N
   References_priv: N
        Index_priv: N
        Alter_priv: N
      Show_db_priv: N
        Super_priv: N
Create_tmp_table_priv: N
      Lock_tables_priv: N
          Execute_priv: N
       Repl_slave_priv: N
      Repl_client_priv: N
      Create_view_priv: N
        Show_view_priv: N
   Create_routine_priv: N
    Alter_routine_priv: N
      Create_user_priv: N
            Event_priv: N
          Trigger_priv: N
Create_tablespace_priv: N
              ssl_type: 
            ssl_cipher: 
           x509_issuer: 
          x509_subject: 
         max_questions: 0
           max_updates: 0
       max_connections: 0
  max_user_connections: 0
                plugin: *3FBBDB84EA2B2A0EA599948396AD622B7FF68183
 authentication_string: NULL
      password_expired: N
16
MikeJava

Il semble que votre table d'utilisateurs est corrompue. Le redémarrage que vous avez mentionné a probablement déclenché une mise à niveau vers MySQL et le script mysql_upgrade n'a pas été exécuté. Cela devrait résoudre la situation:

mysql_upgrade -u root -ppassword --skip-grant-tables
mysql -u root -ppassword -e "UPDATE mysql.user SET plugin = 'mysql_native_password' WHERE user = 'mangos'; FLUSH PRIVILEGES"

Source: http://kb.odin.com/fr/126676

Fournir l'option --force à mysql_upgrade réappliquera les scripts de mise à niveau même si une mise à niveau a déjà été effectuée. Cela peut être nécessaire en cas de restauration partielle à partir d'une sauvegarde.

Il convient également de mentionner que la commande permettant de modifier un mot de passe utilisateur a été modifiée dans MySQL 5.7.6 / MariaDB 10.2.0 et le transfert suivant:

ALTER USER mangos IDENTIFIED BY 'mangos';

C'est maintenant la méthode recommandée pour définir le mot de passe, bien que l'ancienne syntaxe SET PASSWORD ne soit pas officiellement obsolète.

34
miken32

mysql_upgrade (suggéré par @ miken32) ne fonctionnait pas pour moi, j'ai donc dû le faire à la dure, en arrêtant le service et en utilisant mysqld_safe, comme expliqué ici .

UPDATE: En fait, cela ne fonctionnait pas non plus, donc je devais faire très fort (attention, ceci supprime toutes vos bases de données):

  1. Sudo killall mysqld
  2. Sudo rm -rf /var/lib/mysql
  3. Sudo apt-get purge mysql-server
  4. Installez le paquet mysql-server à nouveau.
4
knocte

J'ai résolu le problème de ici. Exécutez mysql_upgrade -u root -p pour résoudre le problème ou si vous rencontrez cette erreur lors de la création d'un utilisateur, essayez plutôt d'utiliser "BY" au lieu de "AVEC" dans votre requête.

CREATE USER 'myuser'@'localhost' IDENTIFIED BY 'xyz';
1
Ajeet Khan