阿里云下mysql远程访问被拒绝_记一次MySQL数据库拒绝访问的解决过程
最近在折腾wordpress博客,连接MySQL数据库时提示拒绝访问。经过排查,解决了问题。这里记录下解决问题的方案,以及解决的思路。如有遇到类似问题的读者可以参考下。
用wordpress搭博客,数据库采用MySQL。为了调试方便,创建账户my_account ,允许它从任意主机访问数据库。
修改 wp-config.php 相应配置,注意 DB_HOST 设置为 127.0.0.1。
部署到云服务器上,本地浏览器访问博客,提示数据库拒绝访问(本地连接远程数据没问题),以下为错误日志。
简单排查后,解决了问题,这里记录下解决方案,以及出错的原因。
解决方案
1、方案一:删除 mysql.user表 中,Host字段为 localhost 的匿名账号(账户名为空)。
2、方案二:创建 my_account@localhost 账户,用于本地连接数据库。
笔者采用了方案 一。
首先,确认下 mysql.user 表中是否存在匿名账户。
接着,删除相应匿名账户,再次尝试登陆,成功。
问题分析
为什么匿名账户会导致数据库连接失败?
需要对MySQL的账户创建、客户端连接校验有一定的了解。
创建MySQL账户
基础语法如下:
注意点:(以下用 User 指代账户名,Host 指代 主机)
Host 表示 允许账户从哪台主机访问数据库。主要用于做安全限制,可以是 主机名、IP地址、%(通配符);
User 允许重复,只要 Host 是不同的就行。
当 Host 设置为 % 时,表示允许从任意主机连接数据库。
比如,存在两个xiaoming账户,一个允许从本机连接数据库,一个允许从 14.215.177.39 连接数据库。
匿名账户
也就是 User 为空的账户,可以匹配任意用户名。如下指令创建了匿名账户。
身份校验
数据库服务器收到客户端连接,首先会进行身份校验,将 User、Host、Password 字段,跟 mysql.user 表里的记录进行比较,确认是否合法账户。
这里有个问题:如果 mysql.user表 中存在多条匹配记录,该以哪条记录为准?
答案是“优先级”。大致规则如下:
首先,检查 Host 字段。如果有多个 Host 符合条件,则选择匹配度最高的记录(IP地址 > 通配符%)。
其次,检查 User 字段。如果有多个 User 符合条件,则选择匹配度最高的记录。匿名用户可以匹配任何用户,因此匹配度最低。
优先级匹配例子
举例,假设本地数据库有如下两个账户(Password字段实际非明文)。
运行如下命令,最终登录的账户,匹配的是 第2条 记录。(读者可自行尝试,输入密码123登录失败,输入456登录成功)
为什么呢?回顾下匹配的优先级。
首先,检查 Host 字段。localhost、% 都符合要求。localhost 匹配度高于 %,因此匹配到第2条记录。
接着,检查 User 字段。第2条记录是匿名账户,可匹配任意User值,因此,第2条记录符合要求。
因此,虽然账户 my_account 的 Host字段 为%,但是在本地(数据库所在主机)连接数据库时,因为上述规则的存在,MySQL 会认为你是用匿名账户在登录。
my_account 跟匿名账户的密码是不同的,因此密码校验不通过,拒绝访问。
写在后面
因匿名用户存在,导致本地连接数据库拒绝连接,这个问题很常见,有不少人认为这是MySQL的设计缺陷,比如 这里。
了解了MySQL的身份验证逻辑,遇到类似问题也就有思路了。关于%通配符,匹配优先级,上文并没有详细展开,感兴趣的读者可以自行查看官方文档。
另外,MySQL拒绝访问的原因有多种,读者应具体问题具体分析。
如有错漏,敬请指出。
阿里云下mysql远程访问被拒绝_记一次MySQL数据库拒绝访问的解决过程相关推荐
- mysql native数据同步_记一次MySQL(5.7版本)数据库的主从同步和备份
我遇到的问题 我先后在BAT三大云服务器商购买了学生机,配置如下百度云2核/4G 阿里云1核/2G 腾讯云1核/2G 我的解决方案 由于我不知道百度云的续费规则,导致买了2核/4G的服务器之后以为像阿 ...
- mysql connection是什么_记一次MySQL出现too many connection
今天中午的时候突然接到报警,MySQL连接数暴增..本来设置的max_conntion=6000, 这个数值连接已经够用.接到报警速度连接服务器连接mysql总是报如下错误: [mysql@local ...
- mysql挂载数据卷_记一次生产数据库数据文件进行分区转移
概述 由于之前同事没有对磁盘分区做规划,可以看到数据和系统是在同个分区的,没有单独规划一个数据分区给数据库,还有个分区是640G没有用上.下面简单介绍一下mysql数据库数据文件的转移过程. 1.新建 ...
- mysql查看脚本错误位置_记一次mysql启动不了查找经历
在linux上用的是xampp,mysql启动没有报任何错误,但就是查找不到进程,于是找mysql错误日志,日志在哪?在lampp/var/mysql 以.err结尾的文件里.里面内容如下; /opt ...
- mysql 安装只有一半_记一次MySQL安装出现的坑爹问题。。。
关键词:mysql安装msvcr100.dll缺失 vc++2010 : win10系统首次安装mysql,图方便下载了图形界面的安装包(5.6.4),本以为小事一桩:装一半失败.卸载清注册表.重装 ...
- mysql group by 性能_记一次Mysql group by的优化
直接上干货: 数据量:50万 mysql版本:5.6.26 表结构: CREATE TABLE bet_order_product ( bet_order_product_id varchar(40) ...
- 修改mysql 视图字段类型_记一次mysql视图创建时自定义字段类型不同环境不同的原因...
由于老项目使用的是hibernate,当项目启动时会去检查数据库字段类型等,发现一张视图中某个自定义字段在开发环境中类型为text,但是到了生产环境类型却为mediumtext,导致代码在生产上会有问 ...
- mysql无法启动修复_记一次MySQL无法启动及修复经历
记得有次本地的MySQL无法启动,网上说,去删掉InnoDB日志就行,我就傻乎乎的去删掉了InnoDB相关的文件,果然,没有任何问题,正常启动了. 可是谁曾想,过了几天,故障复现了,我就按部就班的又去 ...
- mysql update不更新_记一次MySQL更新语句update的踩坑
背景 最近在一次线上作业过程中执行了一句DML语句,本以为万无一失,结果应用反馈说没有更新,数据还是没有变,最后经过排查才发现是我语句写错了,导致update语句执行的结果与预期不符. 情景再现 为了 ...
最新文章
- HDFS 文件格式——SequenceFile RCFile
- a=a+b与a+=b有什么区别吗?
- (c语言)和与积的运算第四篇
- “中能融合杯”线下赛感悟
- 使用valgrind检测内存问题
- 东莞 小学计算机编程大赛,关于举办第二十一届东莞市中小学电脑制作活动的通知...
- Jackson ObjectMapper readValue过程
- 当Typora开始收费,开源免费的MarkText编辑器火了:一周新增2k+star
- java swing还有人用吗_Java不是自动管理内存吗,怎么还有内存泄漏?
- OpenSSL学习(十四):基础-指令passwd
- Elasticsearch 之(3)安装、启动elasticsearch和kibana
- 多路数据采集系统软件测试,基于AT89S52多路数据采集系统的设计-测试测量-与非网...
- Windows命令行快速启动快捷方式
- 使用proxychains匿名浏览,清理痕迹(六)
- 钉钉实时拍照和上传图片
- 大数据核心技术是什么
- 等级保护与解读《网络安全法》
- keychain service钥匙串服务
- 负基差会对股票量化对冲造成什么影响?
- 简述关系数据库的数据完整性规则_数据库的关系完整性
热门文章
- python 把数据写到tet_Python随身听023基础知识到底哪里用逗号?
- Remixer-谷歌的UI参数动态修改框架
- android studio防止反编译,防反编译利器-Android studio混淆代码压缩apk包体积
- python自定义配置文件读取_python读取和自定义配置文件的方法
- 天津理工大学计算机调剂信息,天津理工大学2020考研调剂信息
- Atata——C# Web测试自动化框架
- 通过GitHub Actions构建和部署Jekyll网站
- 使用LazZiya.ExpressLocalization开发多区域性ASP.NET Core 3、2、1项目
- 通过社交网络进行OWIN OAuth2身份验证
- .Net开发人员通过WCF使用Node.js