O projeto Spring-mvc não pode selecionar uma tabela mysql específica

O projeto Spring-mvc não pode selecionar uma tabela mysql específica

Estou construindo um projeto Spring-mvc (usando JPA e Hibernate para acesso ao banco de dados) que está funcionando perfeitamente localmente, na minha caixa de desenvolvimento, com um banco de dados MySQL local.

Agora estou tentando colocar um snapshot em um servidor de teste para meu cliente brincar e estou tendo problemas.

O Tomcat (depois de alguma luta) implanta meu arquivo war sem reclamar, e posso obter alguma resposta do aplicativo pelo navegador.

Quando acesso minha página principal, que está por trás da autenticação Spring Security, ela me redireciona para a página de login, que funciona perfeitamente. Eu tenho o Security configurado para consultar o banco de dados em busca de detalhes do usuário e isso funciona bem. Na verdade, uma alteração na senha do banco de dados se reflete no comportamento do formulário de login, por isso estou confiante de que ESTÁ acessando o banco de dados e consultando a usertabela.

Depois de autenticado, vamos para a primeira página “real” do aplicativo e recebo um erro de “falha no acesso aos dados”. O log do console do servidor obtém esta linha (redigida):

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

No entanto, se eu for para o MySQL a partir do shell usando exatamente os mesmos creds, não terei nenhum problema em selecionar na assettabela:

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

Dividi minhas configurações de acesso do MySQL, limpei o usuário e executei novamente os comandos de concessão, configurei uma versão do usuário em 'localhost' e outra em '%', certificando-me de liberar as permissões.... Nada está mudando o comportamento dessa coisa.

O que da?

Responder1

Descobri.

Acontece que a configuração do banco de dados que você colocou em /src/main/resources/spring/database.properties é usada para a conexão do banco de dados, mas o esquema que você fornece ao Roo quando ele faz sua "engenharia reversa do banco de dados" é preenchido através de todos os arquivos criados pelo Roo. classes de modelo e são usadas para especificar a tabela (schema.table) nas consultas.

O nome do banco de dados do servidor temporário é diferente daquele na minha caixa local. Portanto, os nomes das tabelas que eu estava usando, preenchidos com o nome do esquema do meu banco de dados local, estavam errados. O MySQL fornece uma mensagem de erro sobre não ter permissão para SELECT, quando isso acontece, mas o que realmente está acontecendo é uma incompatibilidade de nome de esquema.

A coisa mais rápida a fazer foi recriar meu banco de dados no servidor de teste com um nome que correspondesse ao da minha caixa de desenvolvimento. Isso resolveu isso.

informação relacionada