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)
這個錯誤讓我看起來有些迷茫,我說實在不行就重啟大法吧,但是重啟之後依然不行,最後又開始定位,發現可能和密碼有關,於是我按照備份的加密串重新配置許可權,就沒問題了,說明開發同學提供給我的密碼是有問題的,而幸好有了備份,這個問題才能在這種摸著石頭過河的情況繼續前進。
個人微信公眾號,歡迎掃碼關注
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/23718752/viewspace-2143799/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 兩個資料訪問受限的問題
- github訪問受限解決辦法Github
- 如何使用手機代理軟體來解決網路訪問受限的問題?
- 函式訪問引數受限的處理方法函式
- JAVA訪問雲資料mysql出現問題JavaMySql
- MySQL 死鎖問題分析MySql
- WebService 訪問問題Web
- 域名訪問和ip訪問引起的http 403問題HTTP
- python訪問redis的問題PythonRedis
- 解決github訪問慢的問題Github
- 解決 github 訪問不了的問題Github
- jboss訪問資料庫的問題資料庫
- mono 訪問 oracle、mysqlMonoOracleMySql
- MySQL rr下幻讀問題分析MySql
- Tomcat訪問分析Tomcat
- 寶塔 ftp訪問不了的問題 filezilla訪問不了Purefpt服務FTP
- oracle實驗記錄 (oracle的兩種受限制登陸訪問)Oracle
- Laravel 訪問器 $appends 忽略的問題LaravelAPP
- 如何解決 github 訪問慢的問題Github
- js資源跨域訪問的問題JS跨域
- 解決JS跨域訪問的問題JS跨域
- 急問:mysql出現的問題MySql
- Oracle EBS DMZ區訪問問題Oracle
- PHP訪問MySQL篇(轉)PHPMySql
- MySQL鎖問題分析-全域性讀鎖MySql
- MySQL鎖等待與死鎖問題分析MySql
- MySQL 問題MySql
- mysql的中文問題MySql
- mysql 遇到的問題MySql
- Win7系統用路由器上網受限制 提示網路訪問受限制Win7路由器
- 解決訪問 GitHub 與 clone 很慢的問題Github
- WEB應用訪問緩慢的問題定位Web
- 解決訪問Github與clone很慢的問題Github
- python訪問oracle時的問題總結PythonOracle
- jboss下applet訪問ejb的問題APP
- 用Hibernate訪問DB27.2的問題DB2
- 禁用 COOKIE 後如何訪問 SESSION 問題CookieSession
- 解決 Github 國內訪問問題Github