Назад | Перейти на главную страницу

Проект Spring-mvc не может выбирать из определенной таблицы mysql

Я создаю проект Spring-mvc (с использованием JPA и Hibernate для доступа к БД), который отлично работает локально, в моем корпусе разработчика, с локальной базой данных MySQL.

Теперь я пытаюсь разместить моментальный снимок на промежуточном сервере, чтобы мой клиент мог поиграть с ним, и у меня возникают проблемы.

Tomcat (после некоторой борьбы) развертывает мой военный файл без жалоб, и я могу получить ответ от приложения через браузер.

Когда я попадаю на свою главную страницу, которая находится за аутентификацией 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, очистил пользователя и повторно запустил команды предоставления, настроил одну версию пользователя из localhost, а другую из%, убедившись, что разрешения сброшены ... Ничего. меняет поведение этой штуки.

Что дает?

Догадаться.

Оказывается, конфигурация базы данных, которую вы поместили в /src/main/resources/spring/database.properties, используется для подключения к базе данных, но схема, которую вы даете Roo, когда он выполняет «обратный инжиниринг базы данных», заполняется через все созданные Roo классы модели, которые используются для указания таблицы (schema.table) в запросах.

Имя базы данных промежуточного сервера отличается от имени в моем локальном ящике. Таким образом, имена таблиц, которые я использовал, заполненные именем схемы для моей локальной базы данных, были неправильными. MySQL выдает неубедительное сообщение об ошибке о том, что у него нет разрешения на SELECT, когда это происходит, но что на самом деле происходит, так это несоответствие имени схемы.

Самое быстрое, что можно было сделать, - это воссоздать мою базу данных на промежуточном сервере с именем, которое соответствовало имени в моем блоке разработчика. Это решило эту проблему.