Spring-mvc專案無法從特定的mysql表中進行選擇

Spring-mvc專案無法從特定的mysql表中進行選擇

我正在建立一個 Spring-mvc 專案(使用 JPA 和 Hibernate 進行資料庫存取),該專案在我的開發盒上使用本地 MySQL 資料庫在本地運行得很好。

現在我試圖將快照放在臨時伺服器上供我的客戶端使用,但我遇到了麻煩。

Tomcat(經過一番努力)毫無怨言地部署了我的 war 文件,並且我可以透過瀏覽器從應用程式獲得一些回應。

當我點擊位於 Spring Security 身份驗證後面的主頁時,它會將我重定向到登入頁面,該頁面運作良好。我已將安全性配置為查詢資料庫以獲取用戶詳細信息,並且效果很好。事實上,資料庫中密碼的變更反映在登入表單的行為中,因此我確信它會到達資料庫並查詢表user

經過身份驗證後,我們進入應用程式的第一個「真實」頁面,我收到「資料存取失敗」錯誤。伺服器的控制台日誌取得此行(已編輯):

ERROR org.hibernate.util.JDBCExceptionReporter - SELECT command denied to user
'myDbUser'@'localhost' for table 'asset'

但是,如果我使用完全相同的憑證從 shell 存取 MySQL,則從表中進行選擇完全沒有問題asset

[development@tomcat01stg]$ mysql -u myDbUser  -pmyDbPwd dbName

...

mysql> \s
--------------
mysql  Ver 14.12 Distrib 5.0.77, for redhat-linux-gnu (i686) using readline 5.1

Connection id:      199
Current database:   dbName
Current user:       myDbUser@localhost
...
UNIX socket:        /var/lib/mysql/mysql.sock
--------------

mysql> select count(*) from asset;
+----------+
| count(*) |
+----------+
|       19 | 
+----------+
1 row in set (0.00 sec)

我已經分解了我的MySQL 訪問設置,清理了用戶並重新運行授予命令,從“localhost”設置了一個用戶版本,從“%”設置了另一個用戶版本,確保刷新權限......什麼都沒有正在改變這個東西的行為。

是什麼賦予了?

答案1

弄清楚了。

事實證明,您放入 /src/main/resources/spring/database.properties 的資料庫配置用於資料庫連接,但是您在 Roo 進行「資料庫逆向工程」時提供的模式會透過所有 Roo 建立的資料庫進行填充模型類,用於在查詢中指定表(schema.table)。

登台伺服器的資料庫名稱與我本機上的資料庫名稱不同。因此,我使用的表名稱(用本地資料庫的架構名稱填充)是錯誤的。當發生這種情況時,MySQL 會給出一條關於沒有 SELECT 權限的蹩腳錯誤訊息,但真正發生的是模式名稱不符。

最快的方法是在臨時伺服器上重新建立資料庫,其名稱與我的開發盒上的名稱相符。這解決了這個問題。

相關內容