MySQL访问受限的问题分析
今天帮同事看了一个MySQL的连接问题,蛮有意思,有两个用户,一个用户连接正常,另外一个连接抛错。
开发同学提供的错误日志如下:
{resin-33} java.net.SocketException
{resin-33} MESSAGE: java.net.ConnectException: Connection timed out
。。。
{resin-33} java.net.SocketException: java.net.ConnectException: Connection timed out
{resin-33} at com.mysql.jdbc.StandardSocketFactory.connect(StandardSocketFactory.java:156)
{resin-33} at com.mysql.jdbc.MysqlIO.<init>(MysqlIO.java:284)
{resin-33} at com.mysql.jdbc.Connection.createNewIO(Connection.java:2706)
{resin-33} at com.mysql.jdbc.Connection.<init>(Connection.java:1485)
可以看到连接数据库的时候抛出了超时异常,但是他们使用telnet xxxx 3306端口是没问题的,显然问题的方向看起来在权限了。
当然从error.log里面也看到了不少的警告信息,看起来他是在解析这个IP信息的时候出了问题。
[Warning] IP address '10.127.xxxx' could not be resolved: Temporary failure in name resolution
[Warning] IP address '10.127.xxxx' could not be resolved: Temporary failure in name resolutio
那么当时的操作大体是怎么样呢,因为这个操作已经很长时间了,我们就简单复现下这个问题,首先使用grants的方式创建用户,当然还是推荐create user的方式。
> grant usage on *.* to webadmin@'10.127.xxx.xxx' identified by 'testmysql.com';
Query OK, 0 rows affected, 1 warning (0.00 sec)
这个时候查看show grants的结果,是有usage的权限的,就跟oracle里面的connect角色差不多,也就是最起码你能连接到数据库。
> show grants for webadmin@'10.127.xxx.xxx';
+---------------------------------------------------+
| Grants for webadmin@10.127.xxx.xxx|
+---------------------------------------------------+
| GRANT USAGE ON *.* TO 'webadmin'@'10.127.xxx.xxx' |
+---------------------------------------------------+
1 row in set (0.00 sec)
而后面的就是访问权限了,比如开发同学不知道哪个权限合适,说你给我所有的权限吧,于是DBA说好,就写下了*.*,然后问题就来了。
> GRANT ALL PRIVILEGES ON *.* TO 'webadmin'@'10.127.xxx.xxx';
使用show grants查看权限,发现原来的usage权限竟然没了。
> show grants for webadmin@'10.127.xxx.xxx';
+------------------------------------------------------------+
| Grants for webadmin@10.127.xxx.xxx|
+------------------------------------------------------------+
| GRANT ALL PRIVILEGES ON *.* TO 'webadmin'@'10.127.xxx.xxx' |
+------------------------------------------------------------+
1 row in set (0.00 sec)
这权限去哪里了呢,我在MySQL 5.5, 5.7版本中都进行了同样的测试,发现如果使用*.*的权限方式,usage的权限都会消失,这个问题还是和一些配置有关,暂时在bug列表中没有找到匹配的描述。
其实一种修复就是赋予权限的时候,要制定数据库名,比如数据库test,那么就使用grants xxxxx on test.* to webadmin@'xxxx';
当然能够模拟出这个问题来,解决就容易的多了,开发同学给我提供了这个用户的密码,我做了简单备份,开始重新配置权限,
create user ,grant [privilege] to test.* to webadmin@'xxxx';
但是很快又收到了开发同学的信息说,程序的错误变了,现在是这个错误。
{main} Attempted reconnect 3 times. Giving up.
{main} at com.mysql.jdbc.Connection.createNewIO(Connection.java:2781)
{main} at com.mysql.jdbc.Connection.<init>(Connection.java:1485)
{main} at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:266)
{main} at org.apache.commons.dbcp.DriverConnectionFactory.createConnection(DriverConnectionFactory.java:38)
这个错误让我看起来有些迷茫,我说实在不行就重启大法吧,但是重启之后依然不行,最后又开始定位,发现可能和密码有关,于是我按照备份的加密串重新配置权限,就没问题了,说明开发同学提供给我的密码是有问题的,而幸好有了备份,这个问题才能在这种摸着石头过河的情况继续前进。
- python使用正则表达式
- python在租房过程中的应用
- python爬虫反爬取---设置IP代理自动变换requests.get()中proxy的IP
- 【译】TensorFlow实现Batch Normalization
- 关于Python语言规范你需要知道的一些小tips
- R语言可视化——REmap(路径图)
- python面向对象
- 字符串hash入门
- R语言数据处理——数据合并与追加
- python爬取链家租房之获取房屋页面的详细信息(房名,地址,房价,面积,url)
- 信用卡“坏账”客户分析(二)
- Mac上提升python运算速度-PyPy初体验
- python处理json数据(复杂的json转化成嵌套字典并处理)
- Pointer-network理论及tensorflow实战
- MySQL 教程
- MySQL 安装
- MySQL 管理与配置
- MySQL PHP 语法
- MySQL 连接
- MySQL 创建数据库
- MySQL 删除数据库
- MySQL 选择数据库
- MySQL 数据类型
- MySQL 创建数据表
- MySQL 删除数据表
- MySQL 插入数据
- MySQL 查询数据
- MySQL where 子句
- MySQL UPDATE 查询
- MySQL DELETE 语句
- MySQL LIKE 子句
- mysql order by
- Mysql Join的使用
- MySQL NULL 值处理
- MySQL 正则表达式
- MySQL 事务
- MySQL ALTER命令
- MySQL 索引
- MySQL 临时表
- MySQL 复制表
- 查看MySQL 元数据
- MySQL 序列 AUTO_INCREMENT
- MySQL 处理重复数据
- MySQL 及 SQL 注入
- MySQL 导出数据
- MySQL 导入数据
- MYSQL 函数大全
- MySQL Group By 实例讲解
- MySQL Max()函数实例讲解
- mysql count函数实例
- MYSQL UNION和UNION ALL实例
- MySQL IN 用法
- MySQL between and 实例讲解
- Access Control: Database(数据库访问控制)最新解析及完整解决方案
- 启动Apache Atlas时报错
- Apache Atlas 安装部署
- SwiftUI:禁止用户交互
- Qt音视频开发34-Onvif时间设置
- 网络工程师提高篇 | 路由重发布你了解多少?从原理到配置,瑞哥带你学习一波!
- 短视频APP开发,简单计时功能
- LeetCode | 94.二叉树的中序遍历
- Druid 的整合
- LeetCode | 104.二叉树的最大深度
- Flutter 目录结构和项目资源
- iOS音视频接入- TRTC互动直播
- 【一天一大 lee】查找常用字符 (难度:简单) - Day20201014
- 金九银十准备换场地?对标腾讯T3的Android高级工程师面试大纲及时雨来了
- 【一天一大 lee】两两交换链表中的节点 (难度:中等) - Day20201013