홍차의 미로찾기

[AWS RDS] 새로운 계정으로 애플리케이션 접속하기 본문

프로그래밍/BUILD DEPLOY

[AWS RDS] 새로운 계정으로 애플리케이션 접속하기

홍차안디 2024. 10. 22. 13:13
반응형

RDS에서 최초로 만드는 계정은 admin 으로 생성.

java spring boot 애플리케이션을 만들면서 로컬 mysql 에만 연결해봤는데, 이번에 rds 생성하고 직접 연결을 시도함.

spring:
  datasource:
    url: jdbc:mysql://rds 엔드포인트:3306/db?useSSL=false&serverTimezone=UTC
    driver-class-name: com.mysql.cj.jdbc.Driver
    username: admin
    password: ~~

 

최초로 만든 슈퍼유저인 admin은 모든 권한이 있어서인지 잘 연결되는것을 확인함.

그래서 애플리케이션 전용 계정인 app_server 계정을 만들기로 함.

또한, 권한은 딱 CRUD만 주기로 함!

첫번째 삽질. 계정 만들 때 @ 뒤에 endpoint 붙임

create user 'app_server'@'rds 엔드포인트' identified by '비밀번호';

 

@ 뒤에 당연히 ip 를 넣는 줄 알고 붙여서 생성.

근데 생각해보니, 계정 생성 시점에 이미 나는 admin 계정으로 rds mysql 에 접속한상태임.

rds 내부에서는 localhost 라는 생각이 들어서 다시 생성!

두번째 삽질. @ 뒤에 localhost 붙임

create user 'app_server'@'localhost' identified by '비밀번호';

 

로컬에서 생성할때는 이렇게 생성했기때문에 rds에도 동일하게 생성해봄.

막상 애플리케이션 연결하니 에러가 났음.

아래와 같은 에러였음.

mysql Cannot invoke "org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(java.sql.SQLException, String)" because the return value of "org.hibernate.resource.transaction.backend.jdbc.internal.JdbcIsolationDelegate.sqlExceptionHelper()" is nul

 

계정 오류도 아니고.. 이상한 에러였음..

챗지피티 말로는, 이 오류 메세지는 db 연결 중에 sql 예외를 처리할 때 발생하는 문제를 나타낸다고 함.

뭔가 계정이 잘못된 것 같아서 이리저리 찾아봄.

근데 보통 RDS에서는 @’localhost’가 아니라 @'%' 로 한다는것을 알게됨

결론

아래와 같이 스크립트 작성했더니 연결 잘 됨!

# app용 계정 생성
create user 'app_server'@'%' identified by '비밀번호';
# app용 계정 권한 부여
grant select,insert,update,delete on mustard.* to 'app_server'@'%';
# mysql에서 권한 테이블을 다시 로드하여 권한 변경사항을 즉시 반영해줌
FLUSH PRIVILEGES;
반응형
Comments