구글클라우드 플랫폼에 서버 배포를 하다가, 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 로 변경했더니 해결되었다.
'개발(Development) > DB(데이터베이스)' 카테고리의 다른 글
[MySQL] 이모티콘 입력 방법: Incorrect string value 해결 (0) | 2022.08.16 |
---|---|
[MySQL] 테이블 필드의 공백, 개행문자, 캐리지리턴 등 제거(하이픈 제거 포함) (0) | 2016.02.01 |
댓글