zoukankan      html  css  js  c++  java
  • 问题ubuntu 和 deepin中 mysql,5.7:ERROR 1698 (28000): Access denied for user 'root'@'localhost'原因与解决

    先给出解决办法

    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     = localhost
            user     = debian-sys-maint
            password = F64nKZ233QkzL8v9
            socket   = /var/run/mysqld/mysqld.sock
            [mysql_upgrade]
            host     = localhost
            user     = debian-sys-maint
            password = F64nKZ233QkzL8v9
            socket   = /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

  • 相关阅读:
    使用 Selenium
    Senium 简介
    第8章 动态渲染页面爬取
    Ajax 结果提取
    Ajax 分析方法
    WINDOW 2008多人访问设置
    Windows 2012设置允许单个用户连接多个会话的方法
    Windows Server 2012开启多人远程
    BOM 表
    修复材料工单分配材料订单重复占料问题的开发
  • 原文地址:https://www.cnblogs.com/jlxa162hhf/p/14161264.html
Copyright © 2011-2022 走看看