Spring-mvcプロジェクトは特定のmysqlテーブルから選択できません

Spring-mvcプロジェクトは特定のmysqlテーブルから選択できません

私は、ローカルの MySQL データベースを使用して、開発ボックス上でローカルに問題なく動作する Spring-mvc プロジェクト (DB アクセスに JPA と Hibernate を使用) を構築しています。

現在、クライアントが使用できるようにステージング サーバーにスナップショットを配置しようとしているのですが、問題が発生しています。

Tomcat は (多少の苦労の末) 私の war ファイルを問題なくデプロイし、ブラウザー経由でアプリケーションから何らかの応答を得ることができます。

Spring Security 認証の背後にあるメイン ページにアクセスすると、ログイン ページにリダイレクトされますが、これは完全に機能します。ユーザーの詳細をデータベースに照会するようにセキュリティを構成しており、これは正常に機能します。実際、データベース内のパスワードの変更はログイン フォームの動作に反映されるため、データベースにアクセスしてテーブルを照会していることは間違いありませんuser

認証されると、アプリの最初の「実際の」ページに移動し、「データ アクセス失敗」エラーが発生します。サーバーのコンソール ログには次の行が表示されます (編集済み):

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

ただし、まったく同じ認証情報を使用してシェルから 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 アクセス設定を分解し、ユーザーをクリーンアップして grant コマンドを再実行し、'localhost' からのユーザー バージョンと '%' からの別のユーザー バージョンを設定し、権限を確実にフラッシュしました...。この動作は何も変わりません。

何が起こったのですか?

答え1

理解した。

/src/main/resources/spring/database.properties に設定したデータベース構成はデータベース接続に使用されますが、Roo が「データベース リバース エンジニアリング」を実行するときに Roo に提供するスキーマは、Roo が作成したすべてのモデル クラスを通じて設定され、クエリでテーブル (schema.table) を指定するために使用されます。

ステージング サーバーのデータベース名は、ローカル ボックスのものと異なります。そのため、ローカル データベースのスキーマ名で入力された、使用していたテーブル名は間違っていました。その場合、MySQL は SELECT 権限がないという意味不明なエラー メッセージを表示しますが、実際に起こっているのはスキーマ名の不一致です。

最も手っ取り早い方法は、開発ボックスと同じ名前でステージング サーバーにデータベースを再作成することでした。これで問題は解決しました。

関連情報