Spring-MVC-Projekt kann nicht aus einer bestimmten MySQL-Tabelle auswählen

Spring-MVC-Projekt kann nicht aus einer bestimmten MySQL-Tabelle auswählen

Ich erstelle ein Spring-MVC-Projekt (unter Verwendung von JPA und Hibernate für den DB-Zugriff), das lokal auf meiner Entwicklungsbox mit einer lokalen MySQL-Datenbank problemlos läuft.

Jetzt versuche ich, einen Snapshot auf einem Staging-Server hochzuladen, damit mein Client damit spielen kann, und ich habe Probleme.

Tomcat stellt (nach einigem Ringen) meine War-Datei ohne Probleme bereit und ich kann über den Browser eine Antwort von der Anwendung erhalten.

Wenn ich meine Hauptseite besuche, die sich hinter der Spring Security-Authentifizierung befindet, werde ich auf die Anmeldeseite weitergeleitet, die einwandfrei funktioniert. Ich habe Security so konfiguriert, dass die Datenbank nach Benutzerdetails abgefragt wird, und das funktioniert einwandfrei. Tatsächlich spiegelt sich eine Änderung eines Passworts in der Datenbank im Verhalten des Anmeldeformulars wider, sodass ich sicher bin, dass es die Datenbank erreicht und die userTabelle abfragt.

Nach der Authentifizierung gelangen wir zur ersten „echten“ Seite der App und ich erhalte die Fehlermeldung „Fehler beim Datenzugriff“. Das Konsolenprotokoll des Servers enthält diese Zeile (redigiert):

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

Wenn ich jedoch von der Shell aus mit genau denselben Anmeldeinformationen zu MySQL gehe, habe ich überhaupt keine Probleme, aus der assetTabelle auszuwählen:

[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)

Ich habe meine MySQL-Zugriffseinstellungen aufgeschlüsselt, den Benutzer bereinigt und die Grant-Befehle erneut ausgeführt, eine Version des Benutzers von „localhost“ und eine andere von „%“ eingerichtet und dabei darauf geachtet, die Berechtigungen zu löschen … Nichts ändert das Verhalten dieses Dings.

Was gibt?

Antwort1

Herausgefunden.

Es stellt sich heraus, dass die Datenbankkonfiguration, die Sie in /src/main/resources/spring/database.properties eingegeben haben, für die Datenbankverbindung verwendet wird, das Schema, das Sie Roo bei seiner „Datenbank-Reverse-Engineering“-Arbeit geben, jedoch durch alle von Roo erstellten Modellklassen gefüllt und zum Angeben der Tabelle (schema.table) in Abfragen verwendet wird.

Der Datenbankname des Staging-Servers unterscheidet sich von dem auf meiner lokalen Box. Daher waren die von mir verwendeten Tabellennamen, die mit dem Schemanamen für meine lokale Datenbank ausgefüllt wurden, falsch. MySQL gibt in diesem Fall eine lahme Fehlermeldung aus, dass keine SELECT-Berechtigung vorliegt, aber was wirklich passiert, ist eine Nichtübereinstimmung der Schemanamen.

Am schnellsten ging es, wenn ich meine Datenbank auf dem Staging-Server mit einem Namen neu erstellte, der mit dem auf meiner Dev-Box übereinstimmte. Damit war das Problem gelöst.

verwandte Informationen