[AWS - 오류]java.sql.SQLException: Access denied for user 'root'@'localhost' (using password: YES)

손지민·2024년 1월 4일
0

AWS

목록 보기
11/13
post-thumbnail
post-custom-banner

개요

Spring Boot 프로젝트를 로컬에서 Jar로 변환 후 $ scp~ 명령어로 EC2 로 복사하고 Jar 파일 실행했는데, 제목의 Error 메세지가 떴습니다.

  • Git Bash
  • EC2 - Amazon Linux 2
  • MySQL 8.0.35
  • Spring Boot 3.2.0/Java17

에러 메세지 설명

  • java.sql.SQLException: Access denied for user 'root'@'localhost' (using password: YES)
    • 이 오류는 MySQL 데이터베이스에 대한 액세스 권한이 거부되었다는 것을 나타냅니다. 'root' 사용자가 'localhost'에서 비밀번호를 사용하여 접속할 수 없는 상태입니다.

해결한 방법

  • 저는 아래의 GPT 답변 내용을 다 확인해도 해결이 안됐습니다.

  • 발생 원인은 이렇습니다.(헤맨 이유)
    로컬에서 Spring Boot 프로젝트로 만든 application.yml에 설정된 MySQL 아이디/비밀번호와 EC2에서의 MySQL 아이디/비밀번호가 달랐습니다.
    그래서 로컬의 스프링부트 프로젝트에서 DB 연결 아이디/비밀번호를 EC2의 MySQL 아이디/비밀번호로 변경했습니다.
    그 후 Jar를 로컬에서 EC2로 scp 명령어로 옮겼다고 생각했는데, 명령어가 틀렸다는 안내가 없어서 복사가 완료된 줄 알고 계속 다른 해결책만 찾고있었는데 알고보니 아래와 같이 안내 메세지 100%가 떠야 복사가 완료된거였습니다.

  • 제대로 다시 Jar 파일을 복사하니 정상 실행 됐습니다.

  • EC2의 jar 파일을 $ rm {파일명} 명령어로 지우고 $ ls 로 확실히 지워진 것을 확인한 후에 정확하게 scp 명령어를 확인하여 100% 복사된 것을 확인 꼭 하시기 바랍니다.

결론

  • application.yml(properties)의 DB 연결 아이디/비밀번호와 MySQL 아이디/비밀번호가 달라서 발생
  • 로컬에서 아이디 비밀번호 바꾸고 Jar 파일 다시 EC2로 복사할 때 확실히 복사된 건지 확인 필수
  • MySQL 계정에 호스트 권한이 잘 설정 되어있는지 확인

추가 확인했던 것들

GPT 답변

확인할 사항

1. 데이터베이스 사용자 권한 확인

MySQL 데이터베이스에 'root' 사용자가 있는지 확인하고 해당 사용자가 'localhost'에서 액세스할 수 있는지 확인하세요.

  • MySQL 로그인:
    mysql -u root -p
  • 'root' 사용자의 권한과 호스트를 확인:
    SELECT user, host FROM mysql.user WHERE user = 'root';
  • 'root' 사용자가 어떤 호스트에서든 액세스할 수 있도록 권한을 부여
    mysql> create user 계정ID@'%' identified by '비밀번호';
    mysql> grant all privileges on DB이름.* to 계정ID@'%';
    mysql> flush privileges;

2. 비밀번호 확인

'root' 사용자의 비밀번호가 정확한지 확인하세요. 오류 메시지에서 "using password: YES"라는 부분은 사용자 비밀번호를 사용하고 있음을 나타냅니다.

3. MySQL 호스트 확인

MySQL 서버가 'localhost'에서 실행 중이고 해당 호스트에 연결할 수 있는지 확인하세요. 필요에 따라 호스트 이름이나 IP 주소를 수정하여 연결할 수 있습니다.

  • MySQL 서버 실행 여부 확인 (EC2 에서):
    sudo service mysqld status or sudo systemctl status mysqld
  • MySQL 로그인:
    mysql -u root -p
  • 호스트 확인:
    SELECT @@hostname;

4. Spring Boot 설정 확인

Spring Boot 애플리케이션의 데이터베이스 연결 구성을 확인하세요. application.properties 또는 application.yml 파일에서 데이터베이스 연결 정보를 올바르게 설정해야 합니다.


어플리케이션 서버(EC2)에서 MySQL 서버로의 연결을 확인하고 허용

  1. 보안 그룹 설정 확인:
    AWS 콘솔에서 EC2 대시보드로 이동합니다.
    인스턴스 목록에서 어플리케이션 서버(EC2)를 선택합니다.
    아래 탭에서 "보안 그룹"을 선택합니다.
    해당 보안 그룹의 인바운드 규칙 중 MySQL 포트(기본적으로 3306)가 허용되어 있는지 확인합니다. 만약 허용되어 있지 않다면 새로운 규칙을 추가해야 합니다.

  2. 인바운드 규칙 추가:
    보안 그룹 설정에서 MySQL 포트(기본적으로 3306)을 열어야 합니다.
    규칙 추가 버튼을 클릭하고, 다음과 같은 정보를 입력합니다:
    유형(Type): MySQL/Aurora
    프로토콜(Protocol): TCP
    포트 범위(Port Range): 3306
    소스(Source): MySQL 서버가 있는 보안 그룹 또는 특정 IP 주소

  3. MySQL 사용자 계정 및 권한 확인:
    MySQL 서버에 로그인하여 MySQL 사용자 계정이 어플리케이션 서버(EC2)의 호스트에서 접속할 수 있는지 확인합니다.
    필요한 경우, 사용자 계정의 호스트 부분을 '%'로 변경하여 모든 호스트에서의 접근을 허용할 수 있습니다.

  4. MySQL 바인딩 주소 확인:
    MySQL 서버의 바인딩 주소 설정을 확인하여 원격 접속이 허용되도록 설정되어 있는지 확인합니다.

  5. AWS VPC 및 서브넷 설정 확인:
    EC2 인스턴스와 MySQL 서버가 동일한 VPC에 속해 있는지 확인합니다.
    서브넷 설정이 정상인지도 확인해야 합니다.

profile
Developer
post-custom-banner

0개의 댓글