상세 컨텐츠

본문 제목

mysql ER_NOT_SUPPORTED_AUTH_MODE 에러가 뜬 이유

카테고리 없음

by esoesmio 2024. 5. 9. 17:36

본문

원인

  • 시작하기에 앞서, 이런 상황이 일어나는 이유를 설명하겠습니다.
  • MySQL은 여러가지 버전을 출시해 왔으며 MySQL에는 authentication method 라는것이 존재합니다.
    • authentication method란 사용자가 MySQL 서버에 로그인 하기 위해 사용하는 인증 방식을 나타냅니다.
  • MySQL7 까지는 기본 mysql_native_password 방식을 사용했으나 MySQL8 부터 caching_sha2_password 방식이 기본 인증 방식이 되었습니다.
    • caching_sha2_password 방식은 이전 방식보다 보안성이 높으며, SHA-256을 사용해 비밀번호를 암호화 합니다. 이 방식을 사용하면 중간자 공격으로 부터 보다 안전하게 데이터를 보호할 수 있습니다.
  • 위 에러가 나타난 이유는 노드 패키지인 mysql.js 모듈이 caching_sha2_password 방식을 지원하지 않아서 그렇습니다.

해결

  • 구글링으로 찾은 대부분의 해결책은 단순히 아래와 같았습니다.
  • 대부분 아래의 쿼리를 MySQL 에서 실행하는 방법을 추천합니다.
  • 아래 쿼리는 해당 계정의 authentication method 를 mysql_native_password로 바꾸는 작업을 수행합니다.
    • 따라서 보안에 좋지 않으며 몇몇 게시글에서는 개인 프로젝트나 연습용으로 할 때 사용하라고 권하는 경우도 있습니다.
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';
  • roo는 해당 계정, localhost 는 해당 계정의 URL, password는 해당 계정의 비밀번호로 대체합니다.
  • 그 후 아래를 연달아 실행합니다.
flush privileges;
  • 위 방법으로 해결이 되지 않는다면, @'localhost'를 제외하고 실행합니다.
  • 이 방법을 통해 로그인을 할 때 사용하는 인증 방식을 기존에 사용하던 방식으로 변경할 수 있습니다.
  • 위 에러가 나타나는 근본적인 원인은 결국 mysql.js 모듈이 caching_sha2_password 인증 방식을 지원하지 않아서 나타나는 경우로 이를 지원하는 패키지를 사용하면 해결할 수 있습니다.
  • mysql2.js 모듈이 새로운 인증 방식을 지원하므로 이를 사용하면 위 에러를 해결 할 수 있습니다.
npm un mysql && npm i mysql2
  • 터미널에서 위 명령어를 통해 mysql 모듈을 지우고 mysql2 모듈을 설치할 수 있습니다.

댓글 영역