在命令行输入mysql -u root –p,输入密码,或通过工具连接数据库时,经常出现下面的错误信息,详细该错误信息很多人在使用MySQL时都遇到过。

ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)  
  • 1

**

通常从网上都能找到解决方案:

**

1.停止服务:停止MySQL服务;

 # windows
net stop mysql
# linux
service mysqld stop

2.跳过验证:修改MySQL安装目录下的my.ini配置文件,使登录时跳过权限检查;

 #到mysql根目录找到mysql配置文件
vim my.ini
#在my.ini,[mysqld]下添加一行,使其登录时跳过权限检查
skip_grant_tables

3.修改密码:启动MySQL服务,登录MySQL,此时提示输入密码,输入任意密码回车即可进入MySQL。

#登录mysql
mysql -u root -p

然后通过SQL语句修改root用户的密码;

#将数据库切换至mysql库
mysql> USE mysql;
#修改密码
mysql> UPDATE user SET password=PASSWORD(‘newpasswd’)WHERE user=’root’;
#刷新MySQL权限相关的表
mysql> flush privileges;
mysql> exit;

4.重启服务:将my.ini文件中加入的跳过权限语句删除或加#号注释。重启服务,使用修改后的密码登录即可。

**

原因分析:

** 
使用root用户登录MySQL,查看user表中的用户信息如下,可以发现host的字段分别为%和localhost。

mysql>select host,user,password from user;
  • 1

在MySQL中%表示可以在任何主机上登录MySQL数据库,那为什么还需要明确创建登录主机为localhost的用户呢? 
这涉及到MySQL安装时的初始化用户,匿名用户以及连接验证策略等,下面进行深入的分析。

在安装MySQL时,会默认初始化一些用户,比如root用户,以及host字段为localhost,user字段为空的用户。User字段为空的用户即为匿名用户,该用户的密码也为空,任何人都可以使用匿名用户登录MySQL数据库,但可以做的事情却是有限的,比如在命令行直接输入mysql登录,可以查看匿名用户对哪些数据库有权限:

mysql>select current_user;
  • 1

mysql>show databases;
  • 1

通过上面的图片可以发现,匿名用户仅对information_schema和test数据库有权限。 
而匿名用户又是如何影响其他用户登录,进而出现28000错误的呢? 
当试图连接MySQL数据库时,数据库根据提供的身份和密码决定是否接受连接请求,身份由两部分组成:用户名和客户端主机(即输入mysql命令的主机)。 
由于host字段中的%匹配任何主机或者host字段包含通配符,就可能出现多个匹配行,服务器必须决定匹配哪一个,解决方案如下:

服务器将user表中的数据读入内存中,按照host和user字段对行进行排序。

mysql>select host,user,password from user order by host desc,user desc;

当客户端试图连接时,服务器查找已排序的行并使用第一个匹配客户端主机和用户名的行,user字段为空表示可以匹配任何用户。

找到匹配行后,在验证密码是否一致,如果一致则登录成功。 
此处主要关注第四行,user为空,即任意用户,不使用密码登录localhost时,匿名用户仅对information_schema和test数据库有权限,使用其他数据库时,导致失败。 

SO 解决办法

mysql> select host,user,password from user order by host desc,user desc;
mysql> update user set host = '%' where host = 'oracle' and user = 'root';
mysql> flush privileges;

mysql学习笔记1---mysql ERROR 1045 (28000): 错误解决办法(续:深入分析)的更多相关文章

  1. mysql学习笔记1---mysql ERROR 1045 (28000): 错误解决办法

    mysql ERROR 1045 (28000): 错误解决办法 在启动mysql服务后,登陆mysql的窗口的时候,执行mysql命令,结果报错,没法登陆.   (在安装mysql和配置的时候,我是 ...

  2. mysql ERROR 1045 (28000): 错误解决办法

    ERROR 1045 (28000): Access denied for user 'ODBC'@'localhost' (using password: NO) ERROR 1045 (28000 ...

  3. mysql登录时,ERROR 1045 (28000): 错误解决办法

    错误问题的描述: ERROR 1045 (28000): Access denied for user 'ODBC'@'localhost' (using password: NO) ERROR 10 ...

  4. mysql 在登陆的时候出现error 1045 (28000): 错误解决办法

    错误显示:ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES) 解决方案: 1.找到配 ...

  5. 1.mysql ERROR 1045 (28000): 错误解决办法

    转自:https://www.cnblogs.com/jpwz/p/6061214.html ERROR 1045 (28000): Access denied for user 'ODBC'@'lo ...

  6. 登录MySQL提示ERROR 1045 (28000)错误解决方法

    今天,登录服务器准备修改数据库的一些东西.但输入密码,却进不了数据库并提示一个错误,如下图 再确认密码没错的情况下,还是进不了数据库.便在网上找到了解决方法,记录下来,供参考学习. 解决方法: 总体思 ...

  7. mysql安装后,进DOS输入命令mysql,提示错误:mysql ERROR 1045 (28000)的解决办法

    一.修改my.ini文件,并重启mysql服务 找到配置文件my.ini  ,然后将其打开,可以选择用记事本打开 打开后,搜索mysqld关键字,找到后,在mysqld下面添加skip-grant-t ...

  8. mysql ERROR 1045 和2058时(28000): 错误解决办法

    mysql ERROR 1045 (28000): 错误解决办法 听语音 | 浏览:54286 | 更新:2018-02-23 14:34 | 标签:mysql 1 2 3 4 5 6 7 分步阅读 ...

  9. CentOS命令登录MySQL时,报错ERROR 1045 (28000):

    CentOS命令登录MySQL时,报错ERROR 1045 (28000): Access denied for user root@localhost (using password: NO)错误解 ...

随机推荐

  1. java 中 SVN 设置所有文件及子目录 needs-lock, svn 提交时自动设置 needs-lock, 及版本不一致问题

    摘自: http://my.oschina.net/zhangzhihao/blog/72177 设置后的效果:文件会自动带上svn:needs-lock属性,默认是只读的要签出才能修改以防止修改完后 ...

  2. windows10 phantomjs 安装和使用

    1.下载phantomjs和 Casper phantomjs下载地址:http://phantomjs.org/download.html Casper下载地址:http://casperjs.or ...

  3. Vue组件开发实践之scopedSlot的传递

    收录待用,修改转载已取得腾讯云授权 导语 现今的前端开发都讲究模块化组件化,即把公共的交互和功能封装到一个个的组件之中,在开发整体界面的时候就能像搭积木一样快速清晰高效.在使用Vue开发我们的vhtm ...

  4. 文件及文件夹更改通知/监测软件TheFolderSpy

    TheFolderSpy是Windows环境下一个监测文件(夹)更改,删除,创建,重命名的绿色免安装小软件,并在文件及文件夹有更改时发送Email通知管理者 该软件使用.Net开发,所以需要安装.Ne ...

  5. (队列的应用5.3.3)POJ 3125 Printer Queue(优先队列的使用)

    /* * POJ_3125.cpp * * Created on: 2013年10月31日 * Author: Administrator */ #include <iostream> # ...

  6. localhost连接慢如何解决?

    localhost连接慢如何解决 php 环境本地用ip连接mysql响应快, 今天碰到一个连接mysql的怪问题,我在php 环境本地用ip连接mysql响应快,用localhost连接慢,后来百度 ...

  7. Tags Used In OpenERP 7.0

    In OpenERP 7.0. the form view of each object has been redesigned so that the object the user is work ...

  8. 【五年】Java打怪升级之路

    之前写过一篇帖子.就是关于工作经验分享的,近期非常多人私信我.所以博客这边再分享一次 这几年来,我最大的感想就是一句话:多看.多写.多想.多问.多分享.多优化.多运动... 1.[多看] 读万卷书,行 ...

  9. centos时间调整的操作(转)

    在我们使用CentOS系统的时候,也许时区经常会出现问题,有时候改完之后还是会出错,下面我们就来学习一种方法来改变这个状况.  如果没有安装,而你使用的是 CentOS系统 那使用命令 yum ins ...

  10. 动态修改Spring定时器

    spring 的Quartz定时器的功能非常强大,可以在特定的年月日小时分秒的时间点触发时间,完成事件的调度,就像windows中得计划任务一样.下面看一个典型的Quartz定时器的实现:   1.首 ...