2012-02-15 131 views
2

我的Ubuntu 11.10桌面上有一個本地mysql服務器。主機名= localhost; username = root;密碼= root;數據庫名稱= CBS。我真的很困惑,因爲當我使用terminalmysql administratormysql query browser訪問mysql時,我使用上面提到的那些身份驗證,一切都正常。我的問題是,當我在我的Java應用程序配置我jdbc.properties我得到這個錯誤:JDBC休眠 - Mysql連接錯誤

org.springframework.web.util.NestedServletException: Request processing failed; nested exception is org.springframework.jdbc.UncategorizedSQLException: Hibernate operation: Cannot open connection; uncategorized SQLException for SQL [???]; SQL state [28000]; error code [1045]; Access denied for user 'root '@'localhost' (using password: YES); nested exception is java.sql.SQLException: Access denied for user 'root '@'localhost' (using password: YES)

我的配置文件,jdbc.properties:

jdbc.driverClassName=com.mysql.jdbc.Driver 
jdbc.url=jdbc:mysql://localhost:3306/CBS 
jdbc.username=root 
jdbc.password=root 

順便說一句,我之所以將使用本地服務器,因爲我們的主服務器關閉,所以我必須使用我的本地mysql繼續我的項目。請幫助我...在此先感謝。

+1

使用mysql adminstrator(或其他工具)時,您的主機名是什麼?正如下面提到的duffymo,您可能會遇到與該用戶連接到本地主機的授權問題。我沒有在消息的第一部分看到有關主機名的任何提及。 – jmq 2012-02-15 23:57:55

+1

你使用root creds來運行你的「java app」嗎?當您的應用程序運行時 - 使用「ps -ef | grep 」查看它並查看哪個用戶正在運行它 - 如果它不是「root」,那麼您的答案就在那裏。 – alfasin 2012-02-15 23:59:28

+0

@jmquigley localhost – NinjaBoy 2012-02-16 00:19:04

回答

2

您可能需要GRANT權限才能訪問數據庫。

看看MySQL的文檔的東西,看起來像這樣:

create database pmt; 
create user pmt identified by 'pmt'; 
grant all on pmt.* to 'pmt'@'%'; 

「PMT」就在上面的例子。我恰巧使數據庫的名稱,用戶名和密碼都一樣。我不建議這是最佳做法。這只是我爲一些地方發展做的事情。

我個人不喜歡GRANT root訪問任何應用程序。即使在玩具應用程序中,我也不會使用root用戶名和密碼。創建新用戶和授予適當的權限不需要太多努力。

+0

我該怎麼做?請給我看。我對這件事很感興趣。 – NinjaBoy 2012-02-15 23:52:21

+0

執行這些命令後,我必須重新啓動服務器嗎? – NinjaBoy 2012-02-15 23:59:06

+0

重啓mysql?沒有。 – duffymo 2012-02-15 23:59:32

5

很可能你的框架以127.0.0.1的身份登錄到本地數據庫。如果您尚未定義適當的域範圍憑證,將在MySQL中創建登錄問題。嘗試使用此方法驗證:

mysql -uroot -proot 
SELECT * from mysql.user WHERE user = 'root'; 

如果沒有「root'@'127.0.0.1」然後發現問題並予以糾正,做兩兩件事之一:

  1. 定義域'127.0.0.1'的作用域憑證。
  2. 爲'root'定義通配域範圍憑證,因此您可以使用來自多個位置的憑證以登錄到您的MySQL。

這裏的第二個示例:

mysql -uroot -proot 

CREATE USER 'root'@'%' IDENTIFIED BY 'root'; 
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION; 
FLUSH PRIVILEGES; 

在一個側面說明,我肯定會推薦使用一些更有創意的用戶ID和密碼。特別是如果您的服務器啓用了TCP套接字。

+0

當我運行命令SELECT * from用戶WHERE user ='root';我將使用什麼數據庫來查看我是否擁有'root'@'127.0.0.1'?我新來這個。 – NinjaBoy 2012-02-16 00:13:56

+0

其實,命令是'select * from mysql.user where user ='root';'。我更新了我的答案。 – Perception 2012-02-16 00:17:22

+0

我看到很多像「+」和「 - 」這樣的隨機字符。但是我看到了這一行:| localhost | root | * 81F5E21E35407D884A6CD4A731AEBFB6AF209E1B | Y | Y.這是否意味着我有根? – NinjaBoy 2012-02-16 00:33:35