Caused by: java.sql.SQLException: Access denied for user 'root'@'localhost' (using password: YES) 에러

박화랑·2025년 3월 20일

문제 현상

애플리케이션을 실행할 때 MySQL 연결 오류 발생

Caused by: java.sql.SQLException: Access denied for user 'root'@'localhost' (using password: YES)

원인 추정
1. MySQL root 계정 권한 문제GRANT ALL PRIVILEGES로 해결 시도
2. 비밀번호 설정 문제ALTER USER로 해결 시도
3. MySQL 버전 및 인증 방식 문제caching_sha2_password 이슈 확인
4. Spring Boot 설정 문제 (application.properties vs Config 중복)
5. 파일 내부 설정 충돌 가능성 발견 → 최종 해결!


문제 해결 과정

✅ 1. MySQL 사용자 권한 설정 확인 및 수정

최초 오류가 Access denied였기 때문에, root 계정의 권한 문제를 의심하고 해결 시도

ALTER USER 'root'@'localhost' IDENTIFIED BY '1q2w3e4r!';
FLUSH PRIVILEGES;
GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' WITH GRANT OPTION;
FLUSH PRIVILEGES;

해결되지 않음 → 다른 원인 가능성 확인 필요


✅ 2. MySQL 인증 방식 변경 (해결 X)

MySQL 8.0 이상에서는 기본 인증 방식이 caching_sha2_password로 설정됨
mysql_native_password로 변경 시도

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '1q2w3e4r!';
FLUSH PRIVILEGES;

🚨 여전히 해결되지 않음 → 문제는 설정 충돌 가능성이 큼!

  • 인텔리제이에서 연결 테스트를 성공했으므로 파일 내에서 뭔가 문제가 있음을 추론!

✅ 3. Spring Boot에서 MySQL 연결 설정 점검

application.properties 설정이 올바른지 확인

spring.datasource.url=jdbc:mysql://localhost:3306/schedule_db?serverTimezone=Asia/Seoul
spring.datasource.username=root
spring.datasource.password=1q2w3e4r!
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver

설정 문제 없음그래도 해결되지 않음


✅ 4. 파일 설정 충돌 가능성 확인

모든 설정을 다시 확인하는 과정에서, Spring Boot의 Config 클래스와 application.properties 설정이 중복된 것을 발견

  • application.properties에서 데이터베이스 연결을 설정했지만
  • @Configuration을 사용한 별도의 Config 클래스에서도 동일한 데이터베이스 설정을 수동으로 정의

Spring Boot는 자동으로 application.properties 설정을 사용하기 때문에,

추가로 Config 클래스를 정의하면 설정 충돌이 발생하여 이전에 설정해둔 값을 덮어쓰게 될 가능성이 높음!


최종 해결 방법

불필요한 Config 클래스를 삭제하고, application.properties 설정만 사용

// ❌ 삭제된 불필요한 Config 클래스
@Configuration
public class DataSourceConfig {
    @Bean
    public DataSource dataSource() {
        return DataSourceBuilder.create()
                .url("jdbc:mysql://localhost:3306/schedule_db?serverTimezone=Asia/Seoul")
                .username("root")
                .password("1q2w3e4r!")
                .driverClassName("com.mysql.cj.jdbc.Driver")
                .build();
    }
}

Spring Boot가 자동으로 설정을 적용하므로 application.properties만 유지

spring.datasource.url=jdbc:mysql://localhost:3306/schedule_db?serverTimezone=Asia/Seoul
spring.datasource.username=root
spring.datasource.password=1q2w3e4r!
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver

이제 정상적으로 MySQL 연결이 가능해짐!


결론

초기 문제: Access denied 오류로 인해 MySQL 권한 문제를 의심했지만, 해결되지 않음
최종 원인: Config 클래스와 application.properties설정 중복으로 인한 충돌
해결 방법: Config 클래스 삭제 후, application.properties 설정만 유지하여 문제 해결

  • 너무 허무한 결과에 비해 들인 시간이 너무 오래걸려 슬펐다... 하지만 다음부턴 절대로 이런 실수를 하지 않도록 명심해야겠다...
profile
개발자 희망생

0개의 댓글