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 액세스 설정을 세분화하고 사용자를 정리한 후 권한 부여 명령을 다시 실행하고 'localhost'와 '%'에서 사용자 버전을 설정하여 권한을 플러시했습니다.... 아무것도 없습니다. 이 일의 행동을 바꾸고 있습니다.

무엇을 제공합니까?

답변1

그것을 알아 냈습니다.

/src/main/resources/spring/database.properties에 넣은 데이터베이스 구성은 데이터베이스 연결에 사용되지만 "데이터베이스 리버스 엔지니어링"을 수행할 때 Roo에 제공한 스키마는 Roo가 생성한 모든 데이터베이스를 통해 채워집니다. 모델 클래스이며 쿼리에서 테이블(schema.table)을 지정하는 데 사용됩니다.

스테이징 서버의 데이터베이스 이름이 내 로컬 상자의 데이터베이스 이름과 다릅니다. 그래서 내 로컬 DB의 스키마 이름으로 채워진 내가 사용하고 있던 테이블 이름이 잘못되었습니다. MySQL은 그런 일이 발생하면 SELECT에 대한 권한이 없다는 잘못된 오류 메시지를 표시하지만 실제로는 스키마 이름 불일치가 발생합니다.

가장 빠른 방법은 내 개발 상자에 있는 이름과 일치하는 이름을 사용하여 준비 서버에서 내 데이터베이스를 다시 만드는 것이었습니다. 이것이 해결되었습니다.

관련 정보