학습 정리/📦 기타

[Node.js] MySQL 연결시 ER_NOT_SUPPORTED_AUTH_MODE 에러 원인과 해결법

무딘붓 2022. 8. 4. 12:09

ER_NOT_SUPPORTED_AUTH_MODE 에러창

1. 문제 상황

 

Node.js와 MySQL을 연동하려고 했더니 위와 같은 에러가 나오면서 작동하지 않았다.


2. 문제 원인

 

sqlMessage: 'Client does not support authentication protocol requested by server; consider upgrading MySQL client',

에러 메시지 중에서 위의 문장이 문제의 원인을 알려준다.

 

원래 MySQL의 default_authentication_plugin(기본 인증 플러그인)은 mysql_native_password이었다. 

하지만, MySQL 8부터 보안이 강화된 caching_sha2_password로 변경되면서 문제가 생긴다.

 

이때, MySQL 클라이언트가 아직 caching_sha2_password 방식을 지원하지 못하는 경우 이런 에러가 발생하게 된다.

 

따라서, 이번 문제는 Node.js의 mysql 모듈이 아직 caching_sha2_password 방식을 지원하지 못해서 생긴 문제다.

 

아래 링크에서 이 문제에 대해 자세히 설명하고 있다.

https://stackoverflow.com/questions/50093144/mysql-8-0-client-does-not-support-authentication-protocol-requested-by-server

 

MySQL 8.0 - Client does not support authentication protocol requested by server; consider upgrading MySQL client

I can't make a simple connection to the server for some reason. I install the newest MySQL Community 8.0 database along with Node.JS with default settings. This is my node.js code var mysql =

stackoverflow.com


3. 문제 해결

 

이제 문제를 해결하는 방법은 크게 2가지로 나뉜다.

 

1. caching_sha2_password 방식을 지원하는 mysql2 모듈을 사용한다 (링크)

2. default_authentication_plugin(기본 인증 플러그인)을 mysql_native_password으로 다운그레이드 한다.

 

 

먼저 1번 방식이 보안상 권장되는 해결책이지만, 나는 아직 mysql 모듈을 사용하고 싶으므로 보안상 단점이 있음에도 불구하고 2번 방식으로 문제를 해결하고자 한다.

 

mysql과 mysql2 모듈의 차이점은 아래 링크를 참고하면 된다.

https://stackoverflow.com/questions/25344661/what-is-the-difference-between-mysql-mysql2-considering-nodejs

 

우선 mysql콘솔로 들어가서 유저의 Plugin을 확인해 보면 위와 같이 caching_sha2_password인 것을 확인할 수 있다.

 

이제 플러그인을 바꿔주면 되는데, 아래 명령어를 입력하면 된다.

ALTER USER '아이디'@'주소' IDENTIFIED WITH mysql_native_password BY '비밀번호';

Node.js에서 사용할 유저의 아이디와 주소, 비밀번호를 위의 코드에 입력해 주면 플러그인이 바뀐 것을 확인할 수 있다.

변경된 plugin

이제 Node.js에서 정상적으로 MySQL을 사용할 수 있다.