重装安装的最新版Kali系统,需要使用mysql,结果发现无法登录,报了以下这个错误

ERROR 1698 (28000): Access denied for user 'root'@'localhost'

换root账号尝试,结果是能正常进入mysql的,查了一下用户记录,只有一条root的localhost,想着是不是因为没有127.0.0.1的host原因,那么按常规处理方法,添加多一条记录

MariaDB [(none)]> GRANT ALL PRIVILEGES ON *.* TO 'root'@'127.0.0.1' IDENTIFIED BY 'root' WITH GRANT OPTION;

MariaDB [(none)]> flush privileges;

切换回普通用户,重启后,还是不行,查了一下mysql版本是MariaDB!

mysql -V

mysql  Ver 15.1 Distrib 10.3.22-MariaDB, for debian-linux-gnu (x86_64) using readline 5.2

想起以前也遇到过这问题,于是再google查关键词,找到了以下博客的解决方案:https://blog.csdn.net/start2016/article/details/78938045,对照着处理终于成功解决

#删除刚开始添加的那一条用户记录
MariaDB [(none)]> delete from mysql.user where user='root' and Host='127.0.0.1';

#修改原来的root记录
MariaDB [(none)]> update mysql.user set authentication_string=PASSWORD('root'), plugin='mysql_native_password' where user='root'
总结:此问题主要是mysql5.7版本的鉴权方案变动了

这种auth_socket鉴权方案在linux超级用户(root)状态下,使用mysql -uroot -p 命令后,不管是否使用密码(空值或乱输入)都能进入管理,而在Linux普通用户下,不管密码是否正确,都不允许登录,直接报了Access denied for user 'root'@'localhost'错误,这错误提示非常不友好,很容易让人误会是密码不正确。

官方auth_socket说明:https://dev.mysql.com/doc/mysql-security-excerpt/5.5/en/socket-authentication-plugin.html