본문 바로가기
개발(Development)/DB(데이터베이스)

mysql 접속 관련 오류 해결: Error: Access denied for user 'root'@'localhost', ER_NOT_SUPPORTED_AUTH_MODE

by 카레유 2021. 10. 18.

구글클라우드 플랫폼에 서버 배포를 하다가, mySQL 데이터베이스 연동을 할 일이 생겼다.

 

mySQL을 설치하고 테스트를 위해 root 계정으로 연동하는데,

아래와 같은 에러가 발생했다.

 

# 발생한 에러

Error: Access denied for user 'root'@'localhost'

code: 'ER_ACCESS_DENIED_NO_PASSWORD_ERROR', 

errno: 1698, 

sqlState: '28000', 

sqlMessage: "Access denied for user 'root'@'localhost'", 

sql: undefined

 

# 원인

구글링 해보니, ubuntu 계열에서 root계정의 auth plugin이 달라서 발생하는 문제라는 것 같다.

참고: https://stackoverflow.com/questions/39281594/error-1698-28000-access-denied-for-user-rootlocalhost

 

 

# 해결 방법

가장 좋은 방법은 별도의 계정을 만들고, 권한을 주는 것 같다.

 

CREATE USER '새계정'@'localhost' IDENTIFIED BY '비밀번호';
GRANT ALL PRIVILEGES ON *.* TO '새계정'@'localhost';
FLUSH PRIVILEGES;

 

--- 해결 완료 ---

 

* 참고

GRANT ALL PRIVILEGES ON *.* TO '새계정'@'localhost'; 

명령어에서 *.* 부분은 db이름.table이름 으로 특정 권한만 주는게 권장된다.

 

# 추가 에러 발생(node.js)

node.js 에서 MySQL 연동시, 아래와 같은 에러가 발생할 수 있다.

 

UnhandledPromiseRejectionWarning:

Error: ER_NOT_SUPPORTED_AUTH_MODE: 

Client does not support authentica tion protocol requested by server; 

consider upgrading MySQL client

 

위에서 설명한 별도 계정을 만들어 접속하고,

MySQL 연동시 사용하는 모듈을 mysql 대신, mysql2 로 변경했더니 해결되었다.

 

 

 

 

 

 

댓글