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 请求期间,出现未处理的异常.请检查堆栈跟踪信息,以了解有关该错误 ...
随机推荐
- Boosting Static Representation Robustness for Binary Clone Search against Code Obfuscation and Compiler Optimization
用于理解恶意软件的内部工作原理,并发现系统中的漏洞,逆向工程是一种耗费人工的却很重要的技术.汇编克隆搜索引擎是通过识别那些重复的或者已知的部件来帮助逆向工程师的工作,要想设计健壮的克隆搜索引擎是一项挑 ...
- Kafka 0.11.0.0 实现 producer的Exactly-once 语义(中文)
很高兴地告诉大家,具备新的里程碑意义的功能的Kafka 0.11.x版本(对应 Confluent Platform 3.3)已经release,该版本引入了exactly-once语义,本文阐述的内 ...
- Linux运维基础
一.服务器硬件 二.Linux的发展史 三.Linux的系统安装和配置 四.Xshell的安装和优化 五.远程连接排错 六.Linux命令初识 七.Linux系统初识与优化 八.Linux目录结构 九 ...
- Qt License 解读
对于桌面和移动平台应用 官方说明如下 Qt for Application Development lets you create applications for desktop and mobil ...
- Spring Security(二十九):9.4.1 ExceptionTranslationFilter
ExceptionTranslationFilter is a Spring Security filter that has responsibility for detecting any Spr ...
- 09-JavaScript之伪数组arguments
JavaScript之伪数组arguments arguments代表的是实参.有个讲究的地方是:arguments只在函数中使用. 1.返回函数实参的个数 使用argument.length方法返回 ...
- VS2010安装MVC4记录
想学MVC4,但自己电脑上是VS2010,所以在网上查询怎样安装MVC4,总结下给大家. VS2010默认安装的是MVC2,安装MVC4必须先装 SP1,然后安装MVC4. VS2010 SP1 (1 ...
- docker(二) windows10下安装docker
官方安装文档: https://docs.docker.com/docker-for-windows/install/ https://docs.docker.com/docker-for-windo ...
- xadmin在Django 1.11中的使用及中英文切换
版权声明:本文为博主原创文章,欢迎转载,并请注明出处.联系方式:460356155@qq.com xadmin是一个强大的替代django admin的管理后台,github地址为:https://g ...
- Ubuntu 16.04安装MySQL(5.7.18)
此篇为http://www.cnblogs.com/EasonJim/p/7139275.html的分支页. 安装MySQL前需要做如下了解: 1.MySQL各类型版本的区别,参考:http://ww ...