当前位置: 代码迷 >> 综合 >> 问题ubuntu 和 deepin中 mysql,5.7:ERROR 1698 (28000): Access denied for user 'root'@'localhost'原因与解决
  详细解决方案

问题ubuntu 和 deepin中 mysql,5.7:ERROR 1698 (28000): Access denied for user 'root'@'localhost'原因与解决

热度:56   发布时间:2023-12-11 14:14:56.0

先给出解决办法

1,第一种,也是最简单直接的办法,就是,既然root不让登录,可以直接创建用户,然后付给这个用户所有权限, 然后登录,不就行了


mysql创建用户并设置所有权限1、创建用户:CREATE USER 'username'@'host' IDENTIFIED BY 'password';username:用户名;host:指定在哪个主机上可以登录,本机可用localhost,%通配所有远程主机;password:用户登录密码;2、授权:GRANT ALL PRIVILEGES ON *.* TO ‘username’@‘%’ IDENTIFIED BY 'password’;刷新权限:FLUSH PRIVILEGES;格式:grant 权限 on 数据库名.表名 to 用户@登录主机 identified by "用户密码"*.*代表所有权;@ 后面是访问MySQL的客户端IP地址(或是 主机名) % 代表任意的客户端,如果填写 localhost 为本地访问(那此用户就不能远程访问该mysql数据库了)。

第二种,修改密码root密码

  • 当时找了一大圈,踩了好多坑,才找到这个
    问题解决链接戳我
    更一般的情况就是,当你安装完mysq-server和mysql client后,使用mysql -u root -p,然后让你输入密码。但是此时你是不知道密码的。
  • 如果你要登录,可以使用sudo mysql 不用密码登录
  • 如果要使用账号密码登录就进行如下操作
    查询默认的用户名和密码:sudo cat /etc/mysql/debian.cnf
	   #Automatically generated for Debian scripts. DO NOT TOUCH![client]host     = localhostuser     = debian-sys-maintpassword = F64nKZ233QkzL8v9socket   = /var/run/mysqld/mysqld.sock[mysql_upgrade]host     = localhostuser     = debian-sys-maintpassword = F64nKZ233QkzL8v9socket   = /var/run/mysqld/mysqld.sock

然后就可以使用mysql -u debian-sys-maint -p
输入密码 F64nKZ233QkzL8v9就可以登录
进入数据库,就可以进行链接里面的操作

总结一下,解决问题只要一条SQL 就是登录到mysql中后执行:

mysql> update mysql.user set authentication_string=PASSWORD('newPwd'), plugin='mysql_native_password' where user='root';

同时更改插件并设置密码

然后重启数据库就可以使用mysql -u root -p 来登录数据库了。

原因

至于原因,上面链接已经已经说的很清楚了
是mysql使用了

套接字对等证书可插入认证 auth_socket


我再补充下。
就是上面博客里面的链接已经失效,可以查看官方文档描述,auth_socket
mysql文档描述

服务器端auth_socket身份验证插件对从本地主机通过Unix套接字文件连接的客户端进行身份验证。该插件使用 SO_PEERCRED套接字选项来获取有关运行客户端程序的用户的信息。因此,该插件只能用于支持该SO_PEERCRED选项的系统 ,例如Linux。

大致就是,如果您安装5.7并且没有为root用户提供密码,它将使用auth_socket插件。该插件不关心,也不需要密码。它只检查用户是否使用UNIX套接字进行连接,然后比较用户名。


最后,在整体给出上面的参考链接

里面更加详细的介绍了解决办法和错误原因。

http://www.cnblogs.com/leolztang/p/5094930.html
https://dev.mysql.com/doc/refman/8.0/en/socket-pluggable-authentication.html#socket-pluggable-authentication-usage
http://feed.askmaclean.com/archives/change-user-password-in-mysql-5-7-with-plugin-auth_socket.html
https://bbs.deepin.org/forum.php?mod=viewthread&tid=169658&highlight=mysql

  相关解决方案