Authentication Failed 에러
Authentication Failed 에러에 대해 "왜?"라고 물으면 답할 수 있으신가요?
\n\n> Authentication Failed 에러에 대해 "왜?"라고 물으면 답할 수 있으신가요?\n# MongoDB Authentication Failed 에러 해결
에러 상황
Spring Boot와 MongoDB를 연동하는 과정에서 다음과 같은 인증 실패 에러가 발생했습니다.
com.mongodb.MongoCommandException: Command failed with error 18 (AuthenticationFailed):
'Authentication failed.' on server ${IP}:${PORT}.
The full response is {"ok": 0.0, "errmsg": "Authentication failed.",
"code": 18, "codeName": "AuthenticationFailed"}
원인 분석
계정 정보(아이디, 비밀번호)가 정확함에도 인증이 실패하는 경우, 인증 데이터베이스(authSource) 설정 누락 이 원인일 수 있습니다.
MongoDB는 사용자를 특정 데이터베이스에 소속시켜 관리합니다. 따라서 인증 시 해당 사용자가 생성된 데이터베이스를 명시적으로 지정 해야 합니다. 이 설정이 누락되면, MongoDB는 기본 데이터베이스에서 사용자를 찾으려 하므로 인증에 실패합니다.
예를 들어,
admin데이터베이스에서 사용자를 생성했다면, 인증 시에도authSource=admin을 명시해야 합니다.
해결 방법
방법 1: URI를 통한 설정
spring:
data:
mongodb:
uri: mongodb://username:password@host:port/dbname?authSource=admin
방법 2: 개별 속성을 통한 설정
spring:
data:
mongodb:
host: host
port: port
database: dbname
username: username
password: password
authentication-database: admin
예방 팁
- MongoDB 사용자를 생성할 때 어느 데이터베이스에서 생성했는지 반드시 기록해 둡니다.
- Spring Boot 설정에서
authSource또는authentication-database옵션을 ** 항상 명시적으로 지정 **하는 습관을 갖는 것이 좋습니다.- 계정 정보가 정확한데 인증이 실패하면 가장 먼저 인증 데이터베이스 설정을 확인합니다.
** 공식 문서 참고 **: MongoDB Create Users | Connection String URI Format
주의할 점
1. 사용자 생성 후 인증 DB를 올바르게 지정해야 한다
admin DB에서 사용자를 만들었는데 authSource를 지정하지 않으면 인증이 실패합니다. 연결 문자열에 ?authSource=admin을 추가해야 합니다.
2. MongoDB 4.0+에서 기본 인증 메커니즘이 SCRAM-SHA-256으로 변경되었다
구버전 드라이버가 SCRAM-SHA-1만 지원하면 인증이 실패합니다. 드라이버를 업데이트하거나 사용자 생성 시 메커니즘을 지정해야 합니다.
댓글 로딩 중...