千家信息网

MySQL访问受限的问题分析

发表于:2025-02-02 作者:千家信息网编辑
千家信息网最后更新 2025年02月02日,今天帮同事看了一个MySQL的连接问题,蛮有意思,有两个用户,一个用户连接正常,另外一个连接抛错。开发同学提供的错误日志如下:{resin-33} java.net.SocketException{r
千家信息网最后更新 2025年02月02日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.(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)

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


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


权限 问题 同学 开发 数据 数据库 时候 用户 错误 信息 备份 密码 方式 配置 不行 就是 还是 有关 合适 迷茫 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 页游服务器端下载 重庆市中景辰达网络技术有限公司 数据库中创建表并设置主码和外码 三明网络技术服务商 服务器必须用一台单独的计算机 闪耀暖暖官网服务器名称 软件开发助理实习日记 摩尔庄园怎么刷服务器 overlay网络技术研究 软件开发公司财务部副经理的职责 数据库中期刊的频率 浙江财经大学国泰安数据库 蒙自网络安全检查 Linux服务器系统盘需要多大 服务器有硬盘吗 正保开放课堂软件开发企业财务 汕头酒店软件开发设计 无线网络安全需求 数据库设计文档模板 手游方舟服务器招管理员 有关于网络安全语言 魂师对决服务器下载渠道 第一章数据库基础知识第3节 服务器怎么添加cname 浙江财经大学国泰安数据库 手机应用聊天软件开发 无线网络技术应用现状 网络安全工作的基本原则 二道区网络技术有哪些 服务器能当普通笔记本用吗
0