Javascript/Node

Node.js 와 MySQL 8.0.11 연동 (with Sequelize)

Icarus8050 2019. 10. 9. 19:49
반응형

 Node.js 를 학습해보기 위해 Express 로 프로젝트를 생성하였습니다. 그리고 데이터베이스 연동을 위해 Docker로 MySQL 8 컨테이너를 생성하여 서버와 커넥션을 시도하니 다음과 같은 에러 메시지가 나타났습니다.

 데이터베이스와의 연동은 ORM 인 Sequelize 로 시도하였습니다.

 

 해당 에러의 원인은 사용자의 암호 인증과 관련되어있었습니다. MySQL 8.0 에서는 사용자 인증 방법이 caching_sha2_password 만 사용하도록 되었습니다. 그래서 기존의 커넥터에서 사용하는 인증 방법으로 커넥션을 시도하면 인증이 제대로 되지 않는 것이었습니다.

 

 위 문제를 해결하기 위해서는 MySQL에 강제로 mysql_native_password 를 사용할 수 있도록 변경해주어야 합니다. (사실 레거시 버전의 인증방법으로 바꾸는 것은 보안상 좋지 않은 방법이라고 생각하지만 저는 학습이 주 목적이기 때문에, 간단하게 위와 같은 방법으로 해결하였습니다.)

 


MySQL 의 사용자 인증 방법을 mysql_native_password 로 변경하는 방법

 우선 MySQL 상에서 인증 방법을 변경을 위해 컨테이너에 접속합니다.

docker exec -it <container_name> bash

 

 다음 명령어로 MySQL 에 접속합니다.

mysql -u root -p

 

 마지막으로 해당 명령어를 통해 인증 방법을 변경합니다.

mysql> ALTER USER root IDENTIFIED WITH mysql_native_password BY 'password';

mysql> FLUSH PRIVILEGES;

 

변경하고 나면 Sequelize 에서 MySQL과 정상적으로 커넥션이 성공하는 것을 확인할 수 있습니다.

 


참고 자료

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 am a node.js and MySQL beginner and I just started setting up and trying out some basic code. However, I can't make even a simple connection to the server for some reason. I install the newest My...

stackoverflow.com

https://ondemand.tistory.com/246

 

mysql 8.x 인스턴스 연결시 발생하는 this authentication plugin is not supported 에러

mysql 8.x 이전 버전에서는 발생하는 이슈인지 조사를 해보진 못했습니다만 최소한 mysql 8.x 버전에서는 이 문제가 발생할 수 있는 상태입니다. 제 경우 Grafana 에서 mysql 데이터 소스를 만들던 도중 에러를 만..

ondemand.tistory.com

 

반응형