관리 메뉴

나만을 위한 블로그

[PHP] mysqli::__construct(): The server requested authentication method unknown to the client [caching_sha2_password] 에러 해결 본문

PHP

[PHP] mysqli::__construct(): The server requested authentication method unknown to the client [caching_sha2_password] 에러 해결

참깨빵위에참깨빵_ 2020. 1. 23. 17:27
728x90
반응형

언제부턴가 포트 포워딩이 제대로 되지 않아서 해결을 못하고 결국 리눅스를 재설치한 뒤 웹 페이지 코드들과 DB 설정들을 복구했다.

그런데 게시판에 들어가자 아래와 같은 에러가 발생했다.

 

mysqli::__construct(): The server requested authentication method unknown to the client [caching_sha2_password] in ~~~

 

construct(): 뒤의 문장은 '서버가 클라이언트에게 알려지지 않은 인증 방법을 요청했습니다' 라는 뜻이다.

인증 방법? 인증 방법이란 말이 왜 튀어나왔을까....뭘 인증한단 거지? 내가 권한을 가진 사람인지를 인증한다는 뜻인가?

이런 생각을 하면서 에러 문구를 그대로 구글에 붙여넣었다.

그러자 내 눈에 바로 스택 오버플로우의 질문글이 보였다.

 

https://stackoverflow.com/questions/50026939/php-mysqli-connect-authentication-method-unknown-to-the-client-caching-sha2-pa

 

php mysqli_connect: authentication method unknown to the client [caching_sha2_password]

I am using php mysqli_connect for login to a MySQL database (all on localhost)

stackoverflow.com

2번째 답변에 I solved this by SQL command 라고 적혀있으며 그 밑엔 이런 SQL 문이 있었다.

 

ALTER USER 'mysqlUsername'@'localhost' IDENTIFIED WITH mysql_native_password BY 'mysqlUsernamePassword';

 

이 양식대로 mysqlUsername, mysqlUsernamePassword 부분만 바꿔주고 다시 게시판에 들어가보니 해결됐다.

그런데 이 문장이 무슨 의미인지 궁금해졌다. 그래서 MySQL 디벨로퍼 사이트에 들어가 검색해봤다.

아래는 MySQL 디벨로퍼 사이트에 적혀있는 ALTER USER 문에 대한 설명 중 일부다.

https://dev.mysql.com/doc/refman/8.0/en/alter-user.html

 

MySQL :: MySQL 8.0 Reference Manual :: 13.7.1.1 ALTER USER Statement

13.7.1.1 ALTER USER Statement ALTER USER [IF EXISTS] user [auth_option] [, user [auth_option]] ... [REQUIRE {NONE | tls_option [[AND] tls_option] ...}] [WITH resource_option [resource_option] ...] [password_option | lock_option] ... ALTER USER [IF EXISTS]

dev.mysql.com

더보기

- 'alter user' 문은 MySQL 계정을 수정하는 SQL문이다. 기존 계정에 대한 인증, 역할, 리소스 제한 및 암호 관리 속성 수정 등의 기능을 한다. 계정을 잠그거나 잠금 해제하는 데 쓸 수도 있다.

대부분의 경우 alter user 문에는 전역 create user 권한 or MySQL 시스템 스키마에 대한 update 권한이 필요하다.

 

그런데 mysql_native_password라는 건 뭘 의미하는 건지 모르겠어서 디벨로퍼 사이트에서 검색해봤다.

 

더보기

일반 텍스트 비밀번호 값과 함께 인증 플러그인 지정

 

인증 플러그인이 mysql_native_password라는 뜻인가? 잘 이해가 안가서 다른 블로그는 어떻게 썼는지 확인했다.

 

https://to-dy.tistory.com/58

 

MySQL 8.0 비밀번호 변경하기! (MySQL 5.7버전 이상)

mysql 비밀번호 변경하다가 병들겠네. 5번은 지웠다가 설치한듯.ㅋㅋㅋ 미친듯이 찾다가 중국분이 올리신 글 보고 어느정도 해결된건 안비밀.(중국어 모름) 아니 세상에 내가 중문글을 읽어볼거라곤 꿈에도 몰랐잖..

to-dy.tistory.com

더보기

auto_plugin은 인증 플러그인으로써, plugin 필드열에 저장된다.

MySQL의 기본 인증 플러그인은 mysql_native_password다. (변경 가능함)

 

MySQL의 기본 인증 플러그인 중 하나가 mysql_native_password였다. 어느 정도 비슷하게는 생각했다.

위 내용들을 정리하면 alter user 문으로 MySQL 계정을 수정하는데, 이 때 mysql_native_password 라는 MySQL의 기본 인증 플러그인을 써서 BY 뒤의 'mysqlUsernamePassword' 안에 입력한 비밀번호를 plugin 필드열에 저장시킨다는 건가?

내가 썼지만 나도 이해가 잘 안된다. 일단 해결됐으니 나중에 더 공부하자.

반응형
Comments