[트러블 슈팅][Node.js]ER_NOT_SUPPORTED_AUTH_MODE 에러

Young Min Kang·2024년 12월 29일

트러블 슈팅

목록 보기
5/5
post-thumbnail

ER_NOT_SUPPORTED_AUTH_MODE

[Nest] 91105  - 2024. 12. 30. 오전 2:04:46   
ERROR [TypeOrmModule] Unable to connect to the database. Retrying (1)...
Error: ER_NOT_SUPPORTED_AUTH_MODE: 
Client does not support authentication protocol requested by server; 
consider upgrading MySQL client

“클라이언트가 서버에서 요구하는 인증 방식을 지원하지 않는다” 라는 의미이다.

MySQL 8.0부터 기본 인증 방식이 caching_sha2_password로 변경되었다. 나의 버전은 현재

9.0.1이다. 음.. 이유는 딱히 없다. 굳이 따지자면 8.0을 썼어야 할 거 같다.

mysql 드라이버(특히 mysql 패키지)는 이 방식을 기본적으로 지원하지 않는다. 왜 지원하지 않을까?

mysql 드라이버는 여전히 MySQL 5.x에서 사용하던 mysql_native_password 방식만 기본적으로 지원한다.

consider upgrading MySQL client라는 메시지가 나오는 것은 클라이언트(드라이버)가 서버(MySQL 8.0)의 최신 인증 방식(caching_sha2_password)을 지원하지 않기 때문이다.

흠… 어떻게 해야할까?
두 가지 해결책이 있다.

  1. 강제로 구 버전인 mysql_native_password 를 사용하도록 변경
  2. MySQL 클라이언트를 caching_sha2_password를 지원하는 버전으로 업그레이드 (TypeORM에서 mysql2 드라이버 사용)
Plugin mysql_native_password reported: 
''mysql_native_password' is deprecated and will be removed in a future release. Please use caching_sha2_password instead'

1번으로 진행하여 어차피 바꿔봤자 위와 같은 경고 메세지가 나온다. 추천되지 않는 방식이라는 것.
왜 추천되지 않는 지는 아래에 있다.

그렇다면 베스트는 당연히 오래된 인증 메커니즘을 사용하지 않고 최신 MySQL이 지원하는 인증 방식을 사용하는 것이 베스트이겠다.

  1. mysql2 에서는 기본적으로 caching_sha2_password 지원하기에 해당 버전으로 다시 install 했다. 그럼에도 해결이 되지 않았다.

  2. TypeOrmModule.forRootdriver: require('mysql2') 를 추가했다.

    1. TypeORM은 기본적으로 'mysql' 드라이버를 사용하도록 설정되어 있다.
    2. type: 'mysql'만 설정하면 내부적으로 'mysql' 패키지를 사용하려고 시도한다.

    mysql2 패키지를 설치했는데도 적용이 안 된 이유는 무엇인가?

    1. TypeORM에게 명시적으로 "mysql 대신 mysql2를 사용하라"고 알려줘야 한다.
    2. TypeORM에게 직접적으로 mysql2 패키지를 주입

 const mysql = this.options.driver || PlatformTools.load(connectorPackage)this.mysql = mysql

이 부분에서 this.options.driver가 없으면 기본적으로 'mysql' 패키지를 로드하도록 되어있다는 사실을 알 수 있다. options에 driver를 명시적으로 지정하지 않으면, TypeORM은 기본적으로 mysql 패키지를 사용하게 된다는 의미.

해당 인증 플러그인을 MySQL에서 추천하지 않는 이유는 간단하다.

  • Google 연구팀과 CWI 암스테르담 연구소는 그간 발표된 SHA-1 취약점 공격 알고리즘과 Google의 고성능 컴퓨팅 인프라를 이용하여 SHA-1 충돌 공격(collision attack) 성공(2017년 2월)

보안성이 취약하기 때문이다.
물론 개인 프로젝트 측면에서는 전혀 문제가 없긴 하다..하하
하지만 개인 프로젝트 트러블 슈팅의 묘미 아닐까 한다 이런 것들을 해결하는 과정 자체가

profile
꾸준히 한걸음씩

0개의 댓글