G4 => G5로 변환 후... 비밀번호 문제입니다.
본문
SIR 회원 여러분, 안녕하세요~
오래동안 벼루었던 G5 업그레이드!!
지난 주말 G4 => G5 로 업그레이드를 하였습니다.
게시물 및 회원 자료는 모두 잘 이전되었습니다.
그런데 문제가 한 가지 발생하였습니다.
회원 로그인이 안됩니다...ㅜ.ㅜ
sir 게시판에서 검색하여 찾아보니...
아마도 mysql 번전때문에 발생한 문제인거 같았습니다.
DB를 살펴보니 패스워드 부분이 아래 그림과 같이 되어 있더군요....
그래서 "그누보드5 팁자료실"에 올려진 아래의 관련글을 참조하여 적용을 해보았습니다.
○관련글 1 : https://sir.kr/g5_tip/839
○관련글 2 : https://sir.kr/g5_tip/3423
그런데... 둘 다 안됩니다...ㅠ,ㅠ
위 글 1, 2와는 다른 문제인가요?
혹시 해결하신 분이나 방법을 아시는 분이 계시다면 도움말씀을 요청드려봅니다.
참고로 서버환경은 PHP 5.2.17, MySQL 5.5.53 입니다.
그럼 편안한 저녁 시간 되십시요~~
답변 5
G4에서 사용하던 비번이 정상적인 G4비번이 아니네요
암호화 한 것이 아닌 입력한 그대로 인것 같군요(Ich<--이것으로 보아)
추측이 맞다면 저런 팁은 적용안됩니다
입력한 내용 그대로이면(즉 비번이 무엇인지 확인 가능하면)
g5_member 테이블을 백업해놓은 후 아래 코드를 적용해보세요
주의 : 아래 코드를 한번만 실행해야 합니다
반드시 회원 테이블을 백업 해둔 후 실행하세요
sql_query("update $g5[member_table] set mb_password=password(mb_password) ");
균이님의 말씀을 보니 이렇게 수정해보세요
로그인후 비밀번호 변경하는 쿼리를 살짝 수정해보면 어떨까 싶습니다.
1. 그누보드5 / bbs / login_check.php 17~18줄
if (!$mb['mb_id'] || !check_password($mb_password, $mb['mb_password'])) {
alert('가입된 회원아이디가 아니거나 비밀번호가 틀립니다.\\n비밀번호는 대소문자를 구분합니다.');
}
를 다음과 같이 변경
function check_old_password($value) {
// mysql 4.0x 이하 버전에서는 password() 함수의 결과가 16bytes
// mysql 4.1x 이상 버전에서는 password() 함수의 결과가 41bytes
$row = sql_fetch(" select old_password('$value') as pass ");
return $row[pass];
}
if (!$mb['mb_id'] || (!check_password($mb_password, $mb['mb_password']) && !check_old_password($mb_password, $mb['mb_password']))) {
alert('가입된 회원아이디가 아니거나 비밀번호가 틀립니다.\\n비밀번호는 대소문자를 구분합니다.');
}
if (check_old_password($mb_password) == $mb[mb_password]) { // 옛날 비밀번호를 새로운 비밀번호로 바꿉니다.
//$sql = " update ".$g5[member_table]." set mb_password='" .
$sql = " update ".$g5[member_table]." set mb_password='" . password($mb_password) . "' where mb_id='".$mb_id."' ";
sql_query($sql);
}
일단 아래와 같이 수정하면 로그인 체크 안하는 현상은 없어질껍니다.
비밀번호 업데이트가 안된다라.... 음... 그건 bbs/login_check.php 파일에서 수정해야 하려나....
저거로도 충분히 되야 할거 같은데... 음음...
function check_old_password($value) {
// mysql 4.0x 이하 버전에서는 password() 함수의 결과가 16bytes
// mysql 4.1x 이상 버전에서는 password() 함수의 결과가 41bytes
$row = sql_fetch(" select old_password('$value') as pass ");
return $row[pass];
}
if (!$mb['mb_id'] || (!check_password($mb_password, $mb['mb_password']) && !check_old_password($mb_password, $mb['mb_password']))) {
alert('가입된 회원아이디가 아니거나 비밀번호가 틀립니다.\\n비밀번호는 대소문자를 구분합니다.');
} else if (check_old_password($mb_password) == $mb[mb_password]) { // 옛날 비밀번호를 새로운 비밀번호로 바꿉니다.
//$sql = " update ".$g5[member_table]." set mb_password='" . sql_password($mb_password) . "' where mb_id='".$mb_id."' "; // 16비트 암호화일때
$sql = " update ".$g5[member_table]." set mb_password='" . password($mb_password) . "' where mb_id='".$mb_id."' "; // 암호화 안된 비밀번호 사용하고 있는 경우
sql_query($sql);
}
추가 글을 적어봅니다. mysql 버전이 무엇인지 먼저 확인해보세요, mysql 4.1 미만 버전인 경우에는 처리 방법이 다릅니다.
기존 password 를 보니 문득 암호화를 16비트로 저장되는 구형 mysql 을 사용하는것은 아닌가 싶은 생각이 드네요
비밀번호를 암호없이 사용하신건가요? 테크노트 암호방식은 md5 였던가 암튼 구조가 다른것으로 기억하는데...
암튼 이것은 기존 암호화 방식에 대한 것은 암호 업데이트 할때 조건문으로 검증하는 과정을 해야할 듯 싶군요.
miwit 에서 어떤 방식으로 암호화를 한건지를 다시 확인해보세요.
비밀번호 암호화를 mysql password 함수를 사용하지 않고 다른 것으로 사용하는듯 싶습니다.
그것이 무언지를 다시 살펴보시고, 하나씩 분석해봐야 하지 싶습니다.