2017-03-01 42 views
-1

這是我的JDBC連接池配置:Glassfish的變化JDBC池從localhost 127.0.0.1

<jdbc-connection-pool max-pool-size="300" steady-pool-size="3" datasource-classname="com.mysql.jdbc.jdbc2.optional.MysqlDataSource" name="teDS" wrap-jdbc-objects="false" connection-validation-method="auto-commit" res-type="javax.sql.DataSource"> 
    <property name="URL" value="jdbc:mysql://localhost:3306/db"></property> 
    <property name="port" value="3306"></property> 
    <property name="DatabaseName" value="db"></property> 
    <property name="serverName" value="localhost"></property> 
    <property name="password" value="XXX"></property> 
    <property name="url" value="jdbc:mysql://localhost:3306/db"></property> 
    <property name="user" value="user"></property> 
</jdbc-connection-pool> 

請幫我

但我PING連接有此錯誤:

的錯誤有發生 對於teDS,Ping連接池失敗。連接無法分配,因爲:訪問被拒絕用戶'用戶'@'127.0.0.1'(使用密碼:是)請檢查server.log以獲取更多詳細信息。

Ping ERROR

回答

1

在MySQL的用戶是通過用戶名和主機標識。

要允許連接,我們需要在MySQL中創建一個具有匹配用戶名和主機的用戶。要創造一個完全匹配用戶:

GRANT USAGE ON *.* TO 'user'@'127.0.0.1' IDENTIFIED BY 'supersecretpassword' ; 
GRANT SELECT, INSERT, UPDATE, DELETE ON somedatabase.* TO 'user'@'127.0.0.1' ; 

要複製一個現有用戶的權限,我們可以利用一個SHOW GRANTS語句來提取權限爲其他用戶

SHOW GRANTS FOR 'user'@'localhost' 

我們可以從中複製輸出,並將其用作新用戶的GRANT語句的基礎,將「localhost」替換爲「127.0.0.1」。

作爲另一種選擇,還可以爲主機名而不是「127.0.0.1」創建具有'%'通配符的用戶。這將允許來自任何IP地址的連接。


如果用戶存在,那麼密碼可能是錯誤的。驗證池配置正在使用的密碼是否與存儲在mysql.user表中的密碼匹配。

SELECT password FROM mysql.user WHERE user = 'user' and host = '127.0.0.1'; 

SELECT PASSWORD('supersecretpassword') ; 

並比較散列值。

正在被返回的錯誤信息看起來是從MySQL服務器:

Access denied for user 'user'@'127.0.0.1' (using password: YES)

這使得被顯示,通過3306端口一個成功的TCP握手已經發生,和MySQL服務器嘗試驗證:用戶='user',host ='127.0.0.1',密碼= PASSWORD('XXX')。

用戶不在mysql.user表中,密碼不正確,或(可能)用戶沒有database ='db'的權限。 (如果將DML更改應用於mysql數據庫中的特權表,請發出FLUSH PRIVILEGES以使這些更改生效(如果使用GRANT和REVOKE語法應用更改,則不需要FLUSH PRIVILEGES,只有在更改時才需要更改使用INSERT,UPDATE,DELETE應用。)