深入分析MySQL ERROR 1045 (28000)[通俗易懂]

深入分析MySQL ERROR 1045 (28000)

大家好,又见面了,我是全栈君。

        这几天在MySQL新建用户后。出现訪问拒绝的问题,错误码为ERROR 1045(28000)。在网上搜索了非常久。找到了非常多解决的方法,但非常遗憾的是这么多办法没有一个能解决该问题。尽管出现的错误码28000非常多人都遇到过。但原因也有所不同。有的是mysql.user表中没有信息。有的是root用户没有password(那就不用password登录),而使用mysql-5.6.19时,mysql.user实用户信息,root用户没有password。採用的方法是root用户登录时输入空password,登录成功。

使用root用户创建測试用test,password为test。语句例如以下:

grant all onlogdb.* to test identified by ‘test’;

        在命令行输入mysql  -u test –p,输入passwordtest,出现以下的错误信息,具体该错误信息非常多人在使用MySQL时都遇到过。

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

        解决方法是用root用户再创建用户test,passwordtest,唯一不同的是指定test登录的主机为localhost,例如以下:

grant all onlogdb.* to test@'localhost' identified by 'test';

        再次使用test用户登录MySQL,成功。例如以下所看到的:

深入分析MySQL ERROR 1045 (28000)[通俗易懂]

        使用root用户登录MySQL。查看user表中的用户信息例如以下。能够发现存在两个test用户。host的字段分别为%和localhost。就是前面创建的两个用户。

深入分析MySQL ERROR 1045 (28000)[通俗易懂]

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

        在安装MySQL时,会默认初始化一些用户,比方root用户,以及host字段为localhost,user字段为空的用户。

User字段为空的用户即为匿名用户。该用户的password也为空,不论什么人都能够使用匿名用户登录MySQL数据库,但能够做的事情却是有限的。比方在命令行直接输入mysql登录,能够查看匿名用户对哪些数据库有权限:

深入分析MySQL ERROR 1045 (28000)[通俗易懂]\

深入分析MySQL ERROR 1045 (28000)[通俗易懂]

        通过上面的图片能够发现,匿名用户仅对information_schema和test数据库有权限。而匿名用户又是怎样影响其它用户登录。进而出现28000错误的呢?当试图连接MySQL数据库时,数据库依据提供的身份和password决定是否接受连接请求,身份由两部分组成:username和client主机(即输入mysql命令的主机)。

因为host字段中的%匹配不论什么主机或者host字段包括通配符。就可能出现多个匹配行。server必须决定匹配哪一个,解决方式例如以下:

  server将user表中的数据读入内存中,依照host和user字段对行进行排序。

  当client试图连接时,server查找已排序的行并使用第一个匹配client主机和username的行,user字段为空表示能够匹配不论什么用户。

  找到匹配行后,在验证password是否一致,假设一致则登录成功。

        依据上面描写叙述的规则。通过演示样例来演示为什么必需要创建test@localhost用户,才干在本地登录成功。对user表进行排序的结果例如以下图所看到的:

深入分析MySQL ERROR 1045 (28000)[通俗易懂]

        当未创建test@localhost时,该表不包括第一行的记录。用户test登录时。则会匹配到第四行的记录:host为localhost,user为空,由于user为空能够匹配不论什么用户,再去验证password不成功登录失败。或者不使用password登录。还是匹配到第四行,但验证password成功,然而匿名用户仅仅对information_schema和test数据库有权限,使用其他数据库时也会失败。例如以下所看到的:

深入分析MySQL ERROR 1045 (28000)[通俗易懂]

        总结一下,当出现28000错误时。首先查看user中是否有数据,是否存在匿名用户。若存在匿名用户则创建userName@localhost,或者也能够删除匿名用户。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/116007.html原文链接:https://javaforall.net

(0)
上一篇 2022年1月27日 下午1:00
下一篇 2022年1月27日 下午2:00


相关推荐

  • 初中数学课程与信息技术的整合[通俗易懂]

    初中数学课程与信息技术的整合[通俗易懂]2.1基本工具介绍 22.1.1滑动的梯子上的猫 22.1.2智能画笔挥洒自如 72.1.3选了再做谋而后动 92.1.4公式输入即打即现 102.1.5动态测量功能多多 152.2文本命令应有尽有 182.2.1点可不简单 182.2.2直线面面观 222.2.3圆和圆弧很重要 232.2.4圆锥曲线条件多 242.2.5函数曲线最有用 252.2.6图形变换功能强 2…

    2022年5月12日
    43
  • Vue组件封装的过程[通俗易懂]

    Vue组件封装的过程[通俗易懂]Vue组件封装的过程vue组件的定义组件(Component)是Vue.js最强大的功能之一 组件可以扩展HTML元素,封装可重用代码在较高层面上,组件是自定义元素,Vue.js的编译器为他添加特殊功能某些情况下,组件也可以表现用`js`特性进行了扩展的原生的HTML元素 所有的Vue组件同时也都是Vue实例,所以可以接受相同的选项对象(除了一些根级特有的选项),并提供相同的生命周期钩子函数vue组件的功能能够把页面抽象成多个相对独立的模块实现代码重用,提高开发效率和代码

    2026年3月2日
    5
  • 【生信笔记】python实现DNA反向互补序列的6种方法

    【生信笔记】python实现DNA反向互补序列的6种方法目录反向序列函数互补序列方法 1 用字典 dictionary 互补序列方法 2 python3trans 方法互补序列方法 3 最原始方法 用多个 if 分支互补序列方法 4 对字符串调用 replace 互补序列方法 5 ASCII 码作为列表下标测试用例反向序列函数 defDNA reverse sequence returnsequen 1 求反向序列互补

    2026年3月20日
    3
  • http 1.0 / 1.1 / 2.0的区别

    http 1.0 / 1.1 / 2.0的区别http1.0 / 1.1 / 2.0的区别

    2022年6月24日
    27
  • intelj 2021.5激活码【在线注册码/序列号/破解码】

    intelj 2021.5激活码【在线注册码/序列号/破解码】,https://javaforall.net/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

    2022年3月18日
    46
  • 通用代码高亮插件(SyntaxHighlighter)

    通用代码高亮插件(SyntaxHighlighter)写这篇博文的起源是我想把自己的博客弄的更加美观,相信你也一样。        首先,我要说SyntaxHighlighter插件的实现方式及应用示例,然后再说明如何将其应用到自己的博客,使博客的代码着色更加美观。 源码: SyntaxHighlighter 示例源码下载SyntaxHighlighterSyntaxHighlighter源码下载1)        Sy…

    2025年6月17日
    4

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号