mysql普通用户本机无法登录的解决办法
背景
mysql和mariadb的用户表里存在匿名用户时,普通用户出现无法登录的情况
## 分析
先查看下用户表
```sql
mysql> select user, host, password from mysql.user;
+------+------------------+-------------------------------------------+
| User | Host | Password |
+------+------------------+-------------------------------------------+
| root | localhost | *84BB5DF4823DA319BBF86C99624479A198E6EEE9 |
| root | 127.0.0.1 | *84BB5DF4823DA319BBF86C99624479A198E6EEE9 |
| sweet| % | *84BB5DF4823DA319BBF86C99624479A198E6EEE9 |
| root | % | *84BB5DF4823DA319BBF86C99624479A198E6EEE9 |
| | localhost | |
+------+------------------+-------------------------------------------+
最后一条user为空的记录就是匿名用户的记录
<br>
普通用户为什么无法登录呢?因为匿名用户的主机名(host)是localhost,当我们在本机登录时,我们只会输入user,
```sql
mysql -usweet -p
所以mysql默认host为localhost,由于mysql的规则是host优先级比user高,所以会先匹配host,mysql就会去用户表里取host=localhost的数据进行认证,所以普通用户(比如sweet)的记录当然就被过滤掉了,因而也就登录不上了,这里有读者可能就会问:%不是可以匹配所有的ip吗,那么应该也可以匹配localhost啊?是的,%可以匹配localhost,但是这里涉及到一个优先级的问题,匹配到了localhost就不会继续匹配%
```
mysql -usweet-p
```
当我们输入以上指令登录时,mysql的匹配逻辑是这样的:
- 匹配host,匹配成功(匹配到一条或多条)就进入下一步
- 匹配user,匹配到第一条后停止,进入下一步
- 有匹配验证密码,没有密码提示输入密码
这里需要注意:匿名用户的user为空(''),是可以匹配所有字符的,所以只要有匿名用户存在,其余普通用户在本机是登录不上的!
我们以普通用户sweet和root用户为例分别模拟上述认证过程
sweet用户
- 匹配host=localhost,匹配到两条记录
| root | localhost | *84BB5DF4823DA319BBF86C99624479A198E6EEE9 |
| | localhost | |
- 从以上两条记录中匹配user=sweet,匹配到一条记录(空字符可以匹配到所有字符)
```sql
| | localhost | |
```
- 匹配password,匹配失败,返回access denied
root用户
- 匹配host=localhost,匹配到两条记录
| root | localhost | *84BB5DF4823DA319BBF86C99624479A198E6EEE9 |
| | localhost | |
- 从以上两条记录中匹配user=root,匹配到一条记录(root为非空,优先级高于空字符,匹配到一条就进入下一步)
```sql
| | localhost | |
```
- 匹配password,匹配成功,进入登录界面
补充:root用户可以登录的原因是mysql初始化时就在用户表里创建了一条root | localhost的记录,而root为非空,优先级高于空字符,所以先匹配到,因而roo用户可以正常登录
## 解决办法
删除匿名用户
### 查看用户表,找到匿名用户对应的记录
```sql
select user,host,password from mysql.user;
<br>
### 删除匿名用户
```sql
drop user ''@'localhost';
重启mysql服务
注意一定要重启服务才会生效!!!
linux下重启命令为:
systemctl stop mariadb
systemctl start mariadb
windows下重启命令为
net stop mysql
net start mysql
mysql普通用户本机无法登录的解决办法的更多相关文章
- 异常详细信息: System.Data.SqlClient.SqlException: 用户 'NT AUTHORITY\IUSR' 登录失败解决办法
最近在做.net项目,因为本人以前做java较多,所以对.net不熟悉,在项目完成后部署到IIS服务器上出现诸多问题,以上其中之一,若有时间,在更新其他问题的解决办法! 异常详细信息: System. ...
- 异常详细信息: System.Data.SqlClient.SqlException:用户 'IIS APPPOOL\DefaultAppPool' 登录失败解决办法
1.安全性---登录名---新建登录名 2.常规----搜索 3.添加SERVICE用户-- 4.服务器角色---勾上sysadmin: IIS中: 应用程序池---对应的程序池上右键---高级设置 ...
- 用户 'IIS APPPOOL\DefaultAppPool' 登录失败解决办法
法一:将iis站点的应用程序池的用户改为本地用户,如果所示: 方法二: 1.打开sql server management studio安全性->登录名->右击新建登录名->常规- ...
- redhat图形界面启动后出现桌面但是没有登录界面解决办法
redhat图形界面启动后出现桌面但是没有登录界面解决办法 2014年07月11日 10:50:10 阅读数:7931 redhat Linux一直用着好好地,今天打开只有图像界面背景,没有出现登陆界 ...
- 卸载MySQL以及重装卡到Start Services的解决办法(亲测有效,刚重装成功)
卸载MySQL以及重装卡到Start Services的解决办法 重装系统永远是个好办法,但是对于我们程序员来说只要一想到电脑上的环境变量和其他的配置就蔫了.所以这一条就当作是废话吧. 一般来说装My ...
- 普通用户不能使用sudo命令的解决办法
普通用户不能使用sudo命令的解决办法 https://www.cnblogs.com/fasthorse/p/5949946.html 1. 切换到root用户下:su – root 2. 给/et ...
- VMware虚拟机中的CentOS7安装Nginx后本机无法访问的解决办法
VMware虚拟机中的CentOS7安装Nginx后本机无法访问的解决办法 在linux上安装nginx 请参考:Linux Centos7 安装 nginx 在虚拟机centos7上安装nginx之 ...
- MySQL Shell无法拉起MGR集群解决办法
MySQL Shell无法拉起MGR集群解决办法 用MySQL Shell要重新拉起一个MGR集群时,可能会提示下面的错误信息: Dba.rebootClusterFromCompleteOutage ...
- SQLServer中用户 'sa' 登录失败解决办法
今天下午,很奇怪的网站突然就打不开了,报错如下: “/”应用程序中的服务器错误. 用户 'sa' 登录失败. 说明: 执行当前 Web 请求期间,出现未处理的异常.请检查堆栈跟踪信息,以了解有关该错误 ...
随机推荐
- SQLServer之创建DML AFTER UPDATE触发器
DML AFTER UPDATE触发器创建原理 触发器触发时,系统自动在内存中创建deleted表或inserted表,inserted表临时保存了插入或更新后的记录行,deleted表临时保存了删除 ...
- SQLServer之PRIMARY KEY约束
PRIMARY KEY约束添加规则 1.在表中常有一列或多列的组合,其值能唯一标识表中的每一行,这样的一列或多列成为表的主键(PrimaryKey). 2.一个表只能有一个主键,而且主键约束中的列不能 ...
- 最小化spring XML配置,Spring提供了4种自动装配策略。
1.ByName自动装配:匹配属性的名字 在配置文件中的写法: <bean name="course" class="course类的全包名">&l ...
- Netty(RPC高性能之道)原理剖析
转载:http://blog.csdn.net/zhiguozhu/article/details/50517551 1,Netty简述 Netty 是一个基于 JAVA NIO 类库的异步通信框架, ...
- SQL Server百万级大数据量删除
删除一个表中的部分数据,数据量百万级. 一般delete from 表 delete from 表名 where 条件: 此操作可能导致,删除操作执行的时间长:日志文件急速增长: 针对此情况处理 de ...
- Python 隔离环境 virtualenv
1) 安装 $ sudo pip3 install virtualenv 2) 创建并进入工程目录,例如 myproject $ mkdir myproject $ cd myproject 3) 在 ...
- 基于 HTML5 的 WebGL 自定义 3D 摄像头监控模型
前言 随着视频监控联网系统的不断普及和发展, 网络摄像机更多的应用于监控系统中,尤其是高清时代的来临,更加快了网络摄像机的发展和应用. 在监控摄像机数量的不断庞大的同时,在监控系统中面临着严峻的现状问 ...
- js对时间的一些操作
new Date() //Thu Dec 27 2018 12:16:16 GMT+0800 (中国标准时间); new Date('2018-1-1,12:20:20'/1258454512000 ...
- Fatal error: Call to undefined function json_decode()解决办法
最近搭建测试服务器,访问网站查看报错日志出现如下错误: Fatal error: Call to undefined function json_decode() 出现该问题原因是安装PHP时没有安装 ...
- ondaHTTPError: HTTP 000 CONNECTION FAILED for url
可能是网络问题,换网络. 可能是获取库的IP无法链接到,换库的IP,如添加清华镜像IP等.