DB

[MySQL] Client does not support authentication protocol requested by server

안모 2024. 1. 22. 23:07

개요

NodeJS로 MySQL에 연결해서 데이터를 입력하려고 했다. MySQL는 이미 몇번이고 이용한 관계로 연결 과정에서 에러가 날 것이라고는 예상도 못했다.

에러

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

 

클라이언트가 서버에서 요청한 인증 프로토콜을 소화할 수 없다고 한다. MySQL을 업그레이드 하라는 권유는 덤이다.

원인

password plugin이 원인이다.

 

caching_sha2_password을 소화하지 못해서 발생하는데, mysql_native_password로 plugin을 변경하면 된다.

ALTER USER <USER>@<HOST> IDENTIFIED WITH mysql\_native\_password BY <PASSWORD>;  
  • : DB User에 등록된 사용자명. root사용자면 root이다.
  • : DB User에 등록된 호스트. 보통 localhost 또는 %(와일드카드)이다. %는 모든 호스트에 해당한다.
  • : DB User에 등록된 비밀번호. 암호화 로직을 재설정하여 비밀번호를 저장하기 때문에 비밀번호도 입력해야 한다. plugin이 바뀌면 동일 비밀번호를 입력해도 암호화된 결과물이 달라지는 것을 확인할 수 있다.

caching_sha2_password

MySql 8.0은 SHA-256 hashing을 구현하는 두 가지 인증 플러그인을 지원한다.

  • 기본적인 SHA-256 인증을 구현한 sha256_password 플러그인
  • sha256_password와 동일한데 성능 향샹을 위해 서버 캐싱을 이용하는 caching_sha2_password 플러그인

문제는 caching_sha2_password를 사용하려면 SSL 보안연결을 사용하거나 RSA 보안을 적용한 비암호 연결을 사용해야 하는 등 제약사항이 생긴다.

 

그래서 구식인 mysql_native_password을 사용하는 것으로 caching_sha2_password에 관한 문제를 피할 수 있다.

 

하지만 에러 로그에서 'consider upgrading MySQL client'라고 안내하는 만큼 우선 업데이트 부터 시도하는 게 장기적으로 좋을 것 같다.