mysql以user1登录_在mysql中创建用户后不能本地登录的解决方法

在安装完成MySQL后,我们通常添加拥有相应权限的普通用户用来访问数据库。在使用用户本地登录数据库的时候,经常会出现怎么登录也无法登录的情况,但是从其他的mysql客户端却可以登录。

[root@mysql01 ~]# mysql -userver -p123456

ERROR 1045 (28000): Access denied for user 'server'@'localhost'

(using password: YES)

本地登录失败;

[root@mysql02 ~]# mysql -h192.168.47.166 -userver -p123456

Welcome to the MySQL monitor. Commands end with ;

or \g.

Your MySQL connection id is 7

Server version: 5.5.36-log Source distribution

远程登录成功;

一、登录后查看mysql.user表的情况

image

可以看到,我的数据库中有server用户和匿名用户localhost;

•server用户的密码是'server'

•匿名用户的密码为空

二、在本机用server用户登录,发现不用密码可以登录;

[root@mysql01 ~]# mysql -userver -p

Enter password:

Welcome to the MySQL monitor. Commands end with ;

or \g.

Your MySQL connection id is 3

Server version: 5.5.36-log Source distribution

Copyright (c) 2000, 2014, Oracle and/or its affiliates. All rights

reserved.

Oracle is a registered trademark of Oracle Corporation and/or

its

affiliates. Other names may be trademarks of their respective

owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current

input statement.

mysql> SELECT USER(), CURRENT_USER();

+--------------------------+-----------------------+

| USER() | CURRENT_USER() |

+-------------------------+------------------------+

| server@localhost |

@localhost |

+-------------------------+-------------------------+

1 row in set (0.00 sec)

登录成功了,使用USER()和CURRENT_USER()两个函数查看所使用的用户。

•USER()函数返回你在客户端登陆时指定的用户名和主机名。

•CURRENT_USER()函数返回的是MySQL使用授权表中的哪个用户来认证你的登录请求。

这里发现,我使用'server'@'localhost'这个账户登录数据库(因为在本地登陆时没指定主机,默认是以localhost登录),

但是数据库使用的是''@'localhost'这个账户来进行登录认证,而''@'localhost'这个匿名用户是没有密码的,因此我输入空密码登

录成功了。但是登录后,所对应的用户的匿名用户。

一般在MySQL在安装完毕后,我们使用mysql_install_db这个脚本生成授权表,会默认创建''@'localhost'这个匿名用户。正是因为这个匿名用户,影响了其他用户从本地登录的认证。

那么MySQL是如何进行用户身份认证呢?

一、当用户从客户端请求登陆时,MySQL将授权表中的条目与客户端所提供的条目进行比较,包括用户的用户名,密码和主机。授权表中的Host字段

是可以使用通配符作为模式进行匹配的,如test.example.com, %.example.com,

%.com和%都可以匹配test.example.com这个主机。授权表中的User字段不允许使用模式匹配,但是可以有一个空字符的用户名代表匿名

用户,并且空字符串可以匹配所有的用户名,就像通配符一样。

当user表中的Host和User有多个值可以匹配客户端提供的主机和用户名时,MySQL将user表读入内存,并且按照一定规则排序,按照排序规则

读取到的第一个匹配客户端用户名和主机名的条目对客户端进行身份验证。

二、排序规则:对于Host字段,按照匹配的精确程度进行排序,越精确的排序越前,例如当匹配test.example.com这个主机时,

%.example.com比%.com更精确,而test.example.com比%.example.com更精确。对于User字段,非空的字符

串用户名比空字符串匹配的用户名排序更靠前。

User和Host字段都有多个匹配值,MySQL使用主机名排序最前的条目,在主机名字段相同时再选取用户名排序更前的条目。因此,如果User和

Host字段都有多个匹配值,主机名最精确匹配的条目被用户对用户进行认证。

了解了这个认证流程,就知道为什么server登录失败了。

使用GaMe在本机登录数据时,不指定-h参数默认为localhost主机登录,而在MySQL中有两个匹配的条目:'server'@'%' 和 ''@'localhost'

匿名用户能够匹配的原因上面说过,空字符串可以匹配所有的用户名,就像通配符一样。

根据MySQL认证时的排序规则,第一个条目的用户名排序更前,第二个条目的主机名更精确,排序更前。

而MySQL会优先使用主机名排序第一的条目进行身份认证,因此''@'localhost'被用户对客户端进行认证。因此,只有使用匿名用户的空密码才能登录进数据库。就会出现下面的情况了。

解决的方法:删除匿名用户(仅仅为了安全也有这个必要)

为什么root用户不会受影响,而只有普通用户不能从本地登录?

因为mysql_install_db脚本会在授权表中生成'root'@'localhost'这个账户。同样的,使用root登录MySQL

时,'root'@'localhost'和''@'localhost'都能匹配登录的账户,但是根据排序规则,主机名相同,而用户名非空字符串优先,

因此'root'@'localhost'这个条目的排序更靠前。使用root本地登录是不会被匿名用户遮盖。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/552414.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

mysql内部时区_一文解决MySQL时区相关问题

前言:在使用MySQL的过程中,你可能会遇到时区相关问题,比如说时间显示错误、时区不是东八区、程序取得的时间和数据库存储的时间不一致等等问题。其实,这些问题都与数据库时区设置有关,本篇文章将从数据库参数入手&…

制作 mysql的rpm文件_自制mysql.rpm安装包

RPM安装比源码更快更方便,更利于统一版本,省去了繁琐的编译过程,下面以制作mysql的rpm安装包为例。编译环境1、 安装rpm-build;检查是否配置rpm环境1 # sudo yum list | greprpm2 This system is not registered with RHN.3 RHN s…

mysql远程授权格式_MySQL远程访问授权

开启 MySQL 的远程登陆帐号有两大步:1、确定服务器上的防火墙没有阻止 3306 端口。MySQL 默认的端口是 3306 ,需要确定防火墙没有阻止 3306 端口,否则远程是无法通过 3306 端口连接到 MySQL 的。如果您在安装 MySQL 时指定了其他端口&#xf…

mysql multi主从复制_mysqld_multi方式配置Mysql数据库主从复制

mysqld_multi设计用于管理在同一台机器上运行的多个mysqld进程,这些进程使用不同的socket文件并监听在不同的端口上。mysqld_multi可以批量启动、关闭、或者报告这些mysqld进程的状态。在这里我们通过这种方式来在同一个机器上启动多个数据库实例,并配置…

mysql 日志节点恢复_基于binlog二进制日志的MySQL恢复笔记

基于binlog二进制日志的MySQL恢复笔记刚好复习到这里,顺手做个小实验,记录下。总的操作流程:step0、关掉数据库的对外访问【防止用户操作继续写入这个库】step1、mysqlbinlog 导出相关时间段数据库的二进制日志step2、编辑today.sql找到误操作…

mysql中if在oracle怎么用_mysql和oracle的mybatis操作

1.Oracle、MySQL插入时返回下一个主键的操作Xml代码 Oracle:SELECT SEQ_ROLE.NEXTVAL AS ID FROM DUALinsert into ROLE(ID, NAME, CREATE, MODIFY) values (#{id}, #{name}, sysdate, sysdate)注意:这边的keyProperty"id"中"id"指的…

mysql数据库的三级模式_2016年计算机三级MySQL数据库试题

2016年计算机三级MySQL数据库试题一、选择题1.E-R图提供了表示信息世界中实体、属性和________的方法。A.数据B.联系C.表D.模式2.数据库系统的核心是________。A.数据模型B.数据库管理系统C.数据库D.数据库管理员3.E-R图是数据库设计的工具之一,它一般适用于建立数据…

python对角线图_python对角线图_python – 在Seaborn Jointplot上绘制对角线(相等的线)...

错误是一个有用的暗示:JointPlot是子图的集合,你必须找到特定的斧头来绘制.修改Seaborn示例:import numpy as npimport pandas as pdimport seaborn as snsfrom matplotlib.pyplot import showsns.set(style"white")# Generate a random corre…

python编程求极限_Sympy笔记一

from IPython.display import displayfrom sympy import *前置知识理解这份笔记的内容需,读者需要具备基础的python知识并且对函数,微积分和矩阵有一定的基础。辅助函数由于后面的笔记中, 我们会大量将一个Sympy object和应用某个函数之后&am…

python语言逆序符号_python的逆序

下面的代码片段可以帮助您完成最后一个任务。如果在字符串的开始或结尾之外的其他地方发现了特殊字符,则对于子集的恢复没有特殊处理。在# Special chars which should be ignored for revertingSPECIALCHARS [ , ., ,]def reverse( string_ ):# Find occurence of…

wpf mysql存储过程_MySQL存储过程的创建及调用

# SQL语句:先编译后执行存储过程(Stored Procedure):一组可编程的函数,是为了完成特定功能的SQL语句集,经编译创建并保存在数据库中,用户可通过指定存储过程的名字并给定参数(需要时)来调用执行。优点(为什么要用存储过…

mysql没加引号导致全表扫描_mysql隐蔽的索引规则导致数据全表扫描

索引是为了加速数据的检索,但是不合理的表结构或适应不当则会起到反作用。我们在项目中就遇到过类似的问题,两个十万级别的数据表,在做连接查询的时候,查询时间达到了7000多秒还没有查出结果。首先说明,关联的字段都已…

python123测验7程序题答案_Python语言程序设计 Python123 测验7: 文件和数据格式化(编程题)...

版权声明:本文为博主原创文章,遵循CC 4.0 by-sa版权协议,转载请附上原文出处链接和本声明。本文链接:https://blog.csdn.net/weixin_42067082/article/details/97661863文本的平均列数描述:打印输出附件文件的平均列数…

mysql 多个密码登录_mysql 多实例登录密码测试

最近在做mysql 多实例的时候,采用不同的方式登录mysql数据库,发现mysql -uroot -p -h 127.0.0.1 -P3308 ,登录时居然不要密码就可以登录,吓得我一身汗,经过检查终于找到原因记录下来,给小白们参考。[rootmy…

设置MySQL排序方式_设置MySQL设置字符集和排序方式

1. 编辑/etc/my.cnf文件, 在"[client]"下添加"default-character-setutf8"2. 编辑/etc/my.cnf文件, 在"[mysqld]"下添加"default-character-setutf8"3. 重新启动mysql服务# sudo /etc/init.d/mysqld restart* 查看系统字符集和排序方式…

redhat5.4 安装mysql_Linux redhat 5.4上安装MYDNS

Linux redhat 5.4上安装MYDNS一、1,MYDNS 的简介:MyDNS是一个UNIX平台下的免费DNS服务器端软件。它被设计成直接从数据库中读取DNS记录软件,并且修改记录后也可时时生效。在MyDNS上,你可随心所欲地增加你自己的次级域名的同时建站…

mysql 5.7 flashback_Flashback for MySQL 5.7

实现原理flashback的概念最早出现于Oracle数据库,用于快速恢复用户的误操作。flashback for MySQL用于恢复由DML语句引起的误操作,目前不支持DDL语句。例如下面的语句:DELETE FROM XXX;UPDATE XXX SET YYYZZZ;若没有flashback功能&#xff0c…

给mysql数据库设计编码_MYSQL数据库编码原理

很多站长可能与织梦CMS小编一样,觉得MYSQL数据库即熟悉又神秘。熟悉是因为我们每天都会用到MYSQL进行安装织梦程序,陌生是因为mysql经常与linux联系,是基于linux系统的下的应用,而我们平常使用的都是windows主机系统。织梦CMS就基…

Java2精要_java知识精要(一)

一、java数组 (疯狂java讲义 第4.5 ~ 4.6章节)1) 声明形式:type[] arrayName; 推荐方式type arrayName[];2) 初始化:方式一:type[] arrayName;arrayName new type[] {element1, element2, element3, ...}方式二:type[] arrayName…

java的反射机制是什么_JAVA反射机制

一、什么是反射机制 简单的来说,反射机制指的是程序在运行时能够获取自身的信息。在java中,只要给定类的名字,那么就可以通过反射机制来获得类的所有信息。二、哪里用到反射机制 有些时候,我们用过一些知识&#xf…