首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

MySQL 遠程連接報錯:Access denied for user 'ykf_test_cx'@'%' to database 'oms_test'

     編輯:程式設計疑難解答

錯誤信息完整解讀

WARN BasicResourcePool - Acquisition Attempt Failed!!! 
Last acquisition attempt exception: 
java.sql.SQLException: Access denied for user 'ykf_test_cx'@'%' to database 'oms_test'

直接原因

用戶 ykf_test_cx 無權訪問數據庫 oms_test。 具體表現為:

  1. 用戶不存在
  2. 用戶存在但未授權該庫
  3. 主機匹配失敗('%' 表示任意主機,但可能被具體 IP 規則覆蓋)
  4. 密碼錯誤(此處提示明確為權限問題,非認證失敗)

排查與修復步驟

1. 確認用戶是否存在

SELECT User, Host FROM mysql.user WHERE User = 'ykf_test_cx';

2. 檢查庫級權限

SHOW GRANTS FOR 'ykf_test_cx'@'%';
-- 若無 oms_test 權限,執行授權:
GRANT ALL PRIVILEGES ON `oms_test`.* TO 'ykf_test_cx'@'%';
FLUSH PRIVILEGES;

3. 驗證主機匹配

  • 若應用部署在固定 IP,建議改用具體 IP:'ykf_test_cx'@'192.168.1.100'
  • 注意:'%' 不匹配 localhost(Unix socket),本地連接需額外授權 'ykf_test_cx'@'localhost'

4. 連接池配置核對

日誌顯示使用 c3p0 連接池(BasicResourcePool),確認配置文件中:

  • jdbcUrl 包含正確數據庫名:jdbc:mysql://host:3306/oms_test
  • user / password 無拼寫錯誤
  • acquireRetryAttempts 默認 30,日誌顯示已達上限,說明重試無意義,必須修復權限

最佳實踐清單

  1. 遵循最小權限原則:僅授予必要表的 SELECT/INSERT/UPDATE/DELETE。
  2. 區分環境:開發/測試/生產使用不同用戶,避免誤操作。
  3. 使用 mysql_ssl_rsa_setup 啟用 SSL 連接,生產環境禁用明文傳輸。
  4. 監控連接池指標:NumBusyConnections、NumFailedAcquires 異常時告警。

權限問題看似簡單,卻是生產事故高發區 —— 授權前三思,變更後驗證。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved