Проект Spring-mvc не может выбрать из определенной таблицы MySQL
Я создаю проект Spring-mvc (использующий JPA и Hibernate для доступа к БД), который отлично работает локально, на моем компьютере разработчика, с локальной базой данных MySQL.
Сейчас я пытаюсь сделать снимок на промежуточном сервере для моего клиента, чтобы играть, и у меня возникли проблемы.
Tomcat (после некоторой борьбы) развертывает мой war-файл без жалоб, и я могу получить ответ из приложения через браузер.
Когда я захожу на свою главную страницу, которая находится за аутентификацией Spring Security, он перенаправляет меня на страницу входа, которая отлично работает. У меня есть 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' и другую из '%', убедившись, что сбросил разрешения.... Ничего меняет поведение этой вещи.
Что дает?
1 ответ
Догадаться.
Оказывается, конфигурация базы данных, которую вы поместили в /src/main/resources/spring/database.properties, используется для соединения с базой данных, но схема, которую вы передаете Roo, когда она выполняет "обратный инженера базы данных", заполняется через все созданные Roo классы модели, и это используется для указания таблицы (schema.table) в запросах.
Имя базы данных промежуточного сервера отличается от имени в моем локальном окне. Таким образом, имена таблиц, которые я использовал, заполненные именем схемы для моей локальной базы данных, были неверными. MySQL выдает ошибочное сообщение об ошибке, когда у вас нет разрешения на SELECT, когда это происходит, но в действительности происходит несоответствие имени схемы.
Самое быстрое, что нужно было сделать, это воссоздать мою базу данных на промежуточном сервере с именем, совпадающим с именем на моем компьютере разработчика. Это решило это.