본문 바로가기
Error

Public Key Retrieval is not allowed 문제가 발생하는 원인과 해결방법

by 흑시바 2025. 3. 23.

스프링 애플리케이션을 개발할 때, 데이터베이스 연결 설정 중 "Public Key Retrieval is not allowed" 문제가 발생할 수 있다. 이 문제는 주로 MySQL 데이터베이스를 사용할 때 발생하며, MySQL 서버의 보안 설정과 관련이 있다. 이 글에서는 이 문제의 원인과 해결 방법을 예시와 함께 상세하게 설명하겠다.

문제 원인

"Public Key Retrieval is not allowed" 문제는 MySQL 서버가 클라이언트로부터 공개 키를 요청하는 것을 허용하지 않기 때문에 발생한다. 이는 MySQL 서버의 caching_sha2_password 인증 방법과 관련이 있으며, MySQL 8.0 이상 버전에서 기본적으로 사용된다. 이 인증 방법은 보안을 강화하기 위해 도입되었지만, 클라이언트가 서버의 공개 키를 요청할 때 이를 허용하지 않으면 연결이 실패하게 된다.


스프링 애플리케이션을 실행할 때 다음과 같은 문제 메시지를 볼 수 있다

 

java.sql.SQLException: Public Key Retrieval is not allowed

해결 방법

이 문제를 해결하기 위해 몇 가지 방법을 사용할 수 있다. 여기서는 두 가지 주요 방법을 설명하겠다.

방법 1: MySQL JDBC URL에 allowPublicKeyRetrieval=true 추가

MySQL JDBC URL에 allowPublicKeyRetrieval=true 파라미터를 추가하여 공개 키 요청을 허용할 수 있다. 이는 가장 간단한 해결 방법이다.


application.properties

 

spring.datasource.url=jdbc:mysql://localhost:3306/your_database?useSSL=false&allowPublicKeyRetrieval=true
spring.datasource.username=your_username
spring.datasource.password=your_password


위와 같이 allowPublicKeyRetrieval=true를 추가하면 MySQL 서버가 클라이언트의 공개 키 요청을 허용하게 되어 연결이 성공적으로 이루어진다.

방법 2: MySQL 사용자 인증 방법 변경

MySQL 서버에서 사용자의 인증 방법을 mysql_native_password로 변경할 수도 있다. 이는 MySQL 서버의 보안 설정을 변경하는 방법으로, 서버에 접근할 수 있는 권한이 있을 때 사용할 수 있다.

결론

"Public Key Retrieval is not allowed" 문제는 MySQL 서버의 보안 설정과 관련된 문제로, 클라이언트가 서버의 공개 키를 요청할 수 없을 때 발생한다. 이 문제를 해결하기 위해 MySQL JDBC URL에 allowPublicKeyRetrieval=true 파라미터를 추가하거나, MySQL 사용자의 인증 방법을 mysql_native_password로 변경할 수 있다. 각 방법의 예시를 참고하여 자신의 환경에 맞는 해결 방법을 선택하기 바란다.

댓글