MySQL 8.0 이상 버전에서의 그누보드 비밀번호 검증 코드
카페 24에서 운영중이던 홈페이지를 수정사항이 생겨 로컬로 개발환경을 세팅해서 (php, db) 로그인을 해보려 했으나 로그인이 되질 않더라구요.
원인을 찾아보니 그누보드의 lib/common.lib.php 파일에서 비밀번호 검증 할때 쓰이는 코드 중 mysql 8.0 버전 이상에서는 사라진 mysql 함수가 있었습니다.

위의 password(..) 함수가 더이상 존재하지 않고 대신에 SHA2() 함수를 사용하라고 스택오버플로우에서 얘기하더라구요
출처) https://stackoverflow.com/questions/52320576/in-mysql-server-8-0-the-password-function-not-working
그래서 해당 함수를 아래와 같이 바꿨습니다.

기존의 password와 유사하게 문자열로부터 해쉬값을 생성하는 함수로 변경하고
DB 상에서는 phpmyadmin 에서 UPDATE 문을 사용해 수동으로 검증 코드에 맞게 mb_password 값을 변경해 주었습니다.
UPDATE g5_member SET mb_password = CONCAT('*', UPPER(SHA1(UNHEX(SHA1($value))))) WHERE mb_id = 'admin';
단, 저는 로컬에서 admin 계정만 이런식으로 임시방편으로 로그인이 가능하게 만든 것이고 이미 많은 수의 유저들이 사용하는 운영중인 홈페이지에서 mysql 8.0 으로 버전업에 사용하기엔 부적절한 방법 같습니다.
|
댓글을 작성하시려면 로그인이 필요합니다.
댓글 4개
password (4.1 이후 41자리): https://stackoverflow.com/a/27282287
old_password (4.0이하 버전 16자리): https://onlinephp.io/code/a7a66c7e4b79b52aaa9f948fc8b8f23fe2644492
PASSWORD() 함수가 사용되던 시절에 생성된 암호가 여전히 DB에 저장되어있을 때죠.
https://github.com/gnuboard/gnuboard5/issues/247