问题:
在mysql中设置用户时遇到login问题。 旧用户可以按预期login,对于新创build的用户,我无法login并收到错误消息。
执行SQL:
CREATE USER 'monty'@'%' IDENTIFIED BY 'some_pass'; GRANT ALL PRIVILEGES ON somedb.* TO 'monty'@'%'; FLUSH PRIVILEGES;
预计:我现在预计将被允许从我的客户端代码(与已经存在的用户一起工作)中以用户monty身份login。
错误:login失败,并在客户端代码中显示以下错误消息:
SQLSTATE[HY000] [1524] Plugin '*937217B9DD8E6E458FC3F434BB7292891****' is not loaded'
更多细节
当我检查mysql.user表时,我看到插件列包含用户的散列密码937217B9DD8E6E458FC3F434BB7292891**** 。
所以我认为auth插件存在错误,并遵循迁移指南( https://dev.mysql.com/doc/refman/5.6/en/account-upgrades.html )。
改变用户
ALTER USER 'monty'@'%' IDENTIFIED WITH mysql_native_password BY 'some_pass';
帮助。 但是,只要我执行flush privileges ,login失败了。
涉及的系统是从mysql / mysql-server构build的docker容器。
mysql Ver 14.14 Distrib 5.7.11, for Linux (x86_64) using EditLine wrapper
uname -a:
Linux 1046ac1aaeee 4.2.0-27-generic #32~14.04.1-Ubuntu SMP Fri Jan 22 15:32:26 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux
MySQLauthenticationvars
mysql> show variables like '%auth' +-------------------------------+-----------------------+ | Variable_name | Value | +-------------------------------+-----------------------+ | default_authentication_plugin | mysql_native_password | | secure_auth | ON | +-------------------------------+-----------------------+ 2 rows in set (0.00 sec)
题
如何让新创build的用户永久login(甚至在刷新特权后)?
这个问题在这里解释。
运行mysql_upgrade -u root -p来解决问题。
要么
如果你正在创build用户,并得到这个问题,而不是在你的查询中使用“ BY ”而不是“ WITH ”。
CREATE USER 'myuser'@'localhost' IDENTIFIED BY 'xyz';
原来,这是因为我忘了在重build最新的mysql版本的docker容器后,在数据库上运行mysql_upgrade。
运行一个mysql_upgrade后,一切都按预期工作。 更多信息可以在这里find。 https://bugs.mysql.com/bug.php?id=79622