MySQL не позволит пользователю войти в систему: ошибка 1524

Server version: 5.7.10 MySQL Community Server (GPL)

В MySQL у меня есть пользовательский mangos. Пользователь работал отлично, когда я его создал. После перезагрузки моего компьютера, однако, попытка входа в mangos дала этот вывод:

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

Это напоминало мне хэш пароля, поэтому после изучения mysql.user я обнаружил, что у манго не было пароля! Я обновил пароль:

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

Теперь я получаю:

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

3FBBDB84EA2B2A0EA599948396AD622B7FF68183 - это тот же номер, указанный в столбце пароля mysql.user для mangos, и отличается от предыдущего. Я все еще не могу войти.

Как заставить MySQL правильно распознать пароль? Это даже проблема здесь?

Изменения:

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

Ответы

Ответ 1

Похоже, ваша таблица пользователей повреждена. Вероятно, перезагрузка, о которой вы говорили, вызвала обновление до MySQL, а mysql_upgrade script не был запущен. Это должно решить ситуацию:

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"

Источник: http://kb.odin.com/en/126676

Предоставление опции --force mysql_upgrade приведет к повторному применению сценариев обновления, даже если обновление уже выполнено. Это может потребоваться в случае частичного восстановления из резервной копии.

Также стоит упомянуть, что команда изменить пароль пользователя изменилась в MySQL 5.7.6/MariaDB 10.2.0 и переадресация:

ALTER USER mangos IDENTIFIED BY 'mangos';

Теперь это предпочтительный метод для установки пароля, хотя старый синтаксис SET PASSWORD официально не устарел.

Ответ 2

mysql_upgrade (предложенный @miken32) не работал у меня, поэтому мне пришлось сделать это сложным способом, отключив службу и используя mysqld_safe, как объяснено .

UPDATE: На самом деле это тоже не сработало, поэтому мне пришлось тяжело усердно (остерегайтесь, удаляет все ваши базы данных):

  • sudo killall mysqld
  • sudo rm -rf /var/lib/mysql
  • sudo apt-get purge mysql-server
  • Установите пакет mysql-server еще раз.

Ответ 3

Я решил проблему решить из здесь. Запустите mysql_upgrade -u root -p, чтобы исправить эту проблему, или если вы сталкиваетесь с этой ошибкой при создании пользователя, чем пытаетесь использовать " BY" вместо " WITH" в своем запросе. p >

CREATE USER 'myuser'@'localhost' IDENTIFIED BY 'xyz';

Ответ 4

Я столкнулся с этой проблемой в поле 5.7.12, которое было реплицировано из окна 5.6. Коробка 5.6 была понижена с 5.7 в качестве части тестовой среды с предварительным тестированием.

Как часть процесса понижения, окно 5.6 получило разрешенные права (запустите mysql_upgrade -force на 5.6 после его понижения), но в процессе выясняется, что некоторые изменения разрешений, выпущенные на сервере 5.6, были нажаты к серверу 5.7.

В конечном итоге хеш пароля authentication_string оказался в столбце плагина для root @localhost.

Исправление перемещения хеша к правильному столбцу и вставка mysql_native_password в столбец 'plugin', чтобы этот пользователь вылечил проблему.

Теперь я работаю над репликацией проблемы, поэтому я могу представить отчет об ошибке, но был задействован ряд факторов, поэтому было трудно воспроизвести.