文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

MySQL访问受限的问题分析

2024-04-02 19:55

关注

今天帮同事看了一个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.(MysqlIO.java:284)
 {resin-33}    at com.mysql.jdbc.Connection.createNewIO(Connection.java:2706)
 {resin-33}    at com.mysql.jdbc.Connection.(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.(Connection.java:1485)
 {main} at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:266)
 {main} at org.apache.commons.dbcp.DriverConnectionFactory.createConnection(DriverConnectionFactory.java:38)

 这个错误让我看起来有些迷茫,我说实在不行就重启大法吧,但是重启之后依然不行,最后又开始定位,发现可能和密码有关,于是我按照备份的加密串重新配置权限,就没问题了,说明开发同学提供给我的密码是有问题的,而幸好有了备份,这个问题才能在这种摸着石头过河的情况继续前进。


个人微信公众号,欢迎扫码关注

MySQL访问受限的问题分析


阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-数据库
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯