MySQL不会让用户登录:错误1524

问题描述 投票:16回答:4
Server version: 5.7.10 MySQL Community Server (GPL)

在MySQL中,我有一个用户芒果。用户在创建它时工​​作得很好。但是,重新启动计算机后,尝试登录芒果会产生以下输出:

$ 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的密码列中显示的芒果数相同,并且是与原始数字不同的数字。我还是无法登录。

如何让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
mysql sql
4个回答
34
投票

您的用户表似乎已损坏。可能你提到的重启会触发升级到MySQL并且没有运行mysql_upgrade脚本。这应该解决这种情况:

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和forward中已更改:

ALTER USER mangos IDENTIFIED BY 'mangos';

现在这是设置密码的首选方法,尽管旧的SET PASSWORD语法尚未正式弃用。


4
投票

mysql_upgrade(由@ miken32建议)不适合我,所以我必须通过关闭服务和使用mysqld_safe来解决问题,正如here所解释的那样。

更新:实际上,这也不起作用,所以我必须努力工作(注意,这会删除所有数据库):

  1. sudo killall mysqld
  2. sudo rm -rf /var/lib/mysql
  3. sudo apt-get purge mysql-server
  4. 再次安装mysql-server包。

1
投票

我从here解决了这个问题。运行mysql_upgrade -u root -p来解决问题,或者如果您在创建用户时遇到此错误,请在查询中尝试使用“BY”而不是“WITH”。

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

-1
投票

我在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插入该用户的“插件”列中可以解决问题。

我现在正在努力复制这个问题,所以我可以提交错误报告,但是涉及到很多因素,所以它很难复制。

© www.soinside.com 2019 - 2024. All rights reserved.