mysql 버젼업에 따른 패스워드 문제 해결~! - 수정본
mysql 4.0.x와 4.1.x 이후 버젼 사이에는 패스워드 포맷이 변경되어서 4.0.x의 패스워드는 4.1.x 이후에서는 인식될 수가 없습니다.
호스팅 이전후에 로그인이 안될 경우에는 mysql 버젼을 확인해 보시고 패스워드 포맷이 변경되는 경우에만 적용하시기 바랍니다.
새로운 사용자는 새로운 패스워드로, 옛날 사용자는 옛날 패스워드로 login check를 하도록 참조한 게시물은
(싸구려팁) mysql 버젼업에 따른 패스워드 문제 해결~! - 아빠불당님
http://sir.co.kr/bbs/board.php?bo_table=g4_tiptech&wr_id=11718
게시물을 참고하여 bbs/common.lib.php 과 bbs/login_check.php 를 수정하시고,
(/bbs/register_form.php의 66라인은 수정하지 않으셔도 됩니다.)
추가 수정내용
- 옛날 사용자가 mysql 4.0.x 패스워드방식(16 bytes)을 사용하여 로그인하면 mysql 4.1.x 버젼의 패스워드(41 bytes)를 멤버테이블의 mb_password 에 저장하게 됩니다.
장점
- 로그인할때에만 현재의 패스워드 방식을 확인하고 새로운 패스워드 포맷으로 DB 에 업데이트 하므로 /bbs/register_form.php, /bbs/member_leave.php 를 수정할 필요가 없음
- 모든 회원이 한번이라도 로그인하게 되면 패스워드가 모두 새로운 패스워드 포맷으로 저장되게 되므로 그누보드가 버젼업될때마다 해당코드를 수정하지 않아도 됨
<bbs/login_check.php 수정>
원본 - line 26~28
-----------------------------------------
if (!$mb[mb_id] || (sql_password($mb_password) != $mb[mb_password])) {
alert("가입된 회원이 아니거나 패스워드가 틀립니다.\\n\\n패스워드는 대소문자를 구분합니다.");
}
-----------------------------------------
=>
수정본
-----------------------------------------
if (!$mb[mb_id] || (sql_password($mb_password) != $mb[mb_password] and sql_old_password($mb_password) != $mb[mb_password])) {
alert("가입된 회원이 아니거나 패스워드가 틀립니다.\\n\\n패스워드는 대소문자를 구분합니다.");
} else {
if (sql_old_password($mb_password) == $mb[mb_password]) {
$sql_password = " mb_password = '".sql_password($mb_password)."' ";
$sql = " update {$g4[member_table]}
set $sql_password
where mb_id = '$mb[mb_id]' ";
sql_query($sql);
}
}
-----------------------------------------
호스팅 이전후에 로그인이 안될 경우에는 mysql 버젼을 확인해 보시고 패스워드 포맷이 변경되는 경우에만 적용하시기 바랍니다.
새로운 사용자는 새로운 패스워드로, 옛날 사용자는 옛날 패스워드로 login check를 하도록 참조한 게시물은
(싸구려팁) mysql 버젼업에 따른 패스워드 문제 해결~! - 아빠불당님
http://sir.co.kr/bbs/board.php?bo_table=g4_tiptech&wr_id=11718
게시물을 참고하여 bbs/common.lib.php 과 bbs/login_check.php 를 수정하시고,
(/bbs/register_form.php의 66라인은 수정하지 않으셔도 됩니다.)
추가 수정내용
- 옛날 사용자가 mysql 4.0.x 패스워드방식(16 bytes)을 사용하여 로그인하면 mysql 4.1.x 버젼의 패스워드(41 bytes)를 멤버테이블의 mb_password 에 저장하게 됩니다.
장점
- 로그인할때에만 현재의 패스워드 방식을 확인하고 새로운 패스워드 포맷으로 DB 에 업데이트 하므로 /bbs/register_form.php, /bbs/member_leave.php 를 수정할 필요가 없음
- 모든 회원이 한번이라도 로그인하게 되면 패스워드가 모두 새로운 패스워드 포맷으로 저장되게 되므로 그누보드가 버젼업될때마다 해당코드를 수정하지 않아도 됨
<bbs/login_check.php 수정>
원본 - line 26~28
-----------------------------------------
if (!$mb[mb_id] || (sql_password($mb_password) != $mb[mb_password])) {
alert("가입된 회원이 아니거나 패스워드가 틀립니다.\\n\\n패스워드는 대소문자를 구분합니다.");
}
-----------------------------------------
=>
수정본
-----------------------------------------
if (!$mb[mb_id] || (sql_password($mb_password) != $mb[mb_password] and sql_old_password($mb_password) != $mb[mb_password])) {
alert("가입된 회원이 아니거나 패스워드가 틀립니다.\\n\\n패스워드는 대소문자를 구분합니다.");
} else {
if (sql_old_password($mb_password) == $mb[mb_password]) {
$sql_password = " mb_password = '".sql_password($mb_password)."' ";
$sql = " update {$g4[member_table]}
set $sql_password
where mb_id = '$mb[mb_id]' ";
sql_query($sql);
}
}
-----------------------------------------
|
댓글 작성
댓글을 작성하시려면 로그인이 필요합니다.
로그인하기
댓글 15개
아빠불당님께서 예전에 작성하셨던 걸 보고 이번에 호스팅 이전하면서 바로 적용했거든요.^^;
반대로 old_password로 변경될 경우도 같이 넣어주시면 어떨가요??
-----------------------------------------
if (!$mb[mb_id] || (sql_password($mb_password) != $mb[mb_password] and sql_old_password($mb_password) != $mb[mb_password])) {
alert("가입된 회원이 아니거나 패스워드가 틀립니다.\\n\\n패스워드는 대소문자를 구분합니다.");
} else {
if (sql_password($mb_password) == $mb[mb_password]) {
$sql_old_password = " mb_password = '".sql_old_password($mb_password)."' ";
$sql = " update {$g4[member_table]}
set $sql_old_password
where mb_id = '$mb[mb_id]' ";
sql_query($sql);
}
}
-----------------------------------------
mysql 버젼이 4.1.x 이후에서 4.0.x 로 변경되거나 4.1.x 이후이더라도 16byte 패스워드를 사용하는 호스팅으로 이전하는 경우에만 사용하시면 됩니다.
$login_check=0;
if (!$mb[mb_id]) {
$login_check = 1;
} else if (sql_password($mb_password) !== $mb[mb_password]) {
// 옛날 버젼의 패스워드일지도 모르니까 한번 더 확인합니다.
if (sql_old_password($mb_password) != $mb[mb_password]) {
$login_check = 1;
} else {
// 옛날 패스워드를 새로운 패스워드로 바꿉니다.
$sql = " update $g4[member_table] set mb_password='" . sql_password($mb_password) . "' where mb_id='$mb_id' ";
sql_query($sql);
}
}
if ($login_check) {
alert("가입된 회원이 아니거나 패스워드가 틀립니다.\\n\\n패스워드는 대소문자를 구분합니다.");
}
if (sql_old_password($mb_password) == $mb[mb_password]) { // 옛날 패스워드를 새로운 패스워드로 바꿉니다.
$sql = " update $g4[member_table] set mb_password='" . sql_password($mb_password) . "' where mb_id='$mb_id' ";
sql_query($sql);
} elseif (!$mb[mb_id] || (sql_password($mb_password) != $mb[mb_password])) {
alert("가입된 회원이 아니거나 패스워드가 틀립니다.\\n\\n패스워드는 대소문자를 구분합니다.");
}
아직 사용할 일은 없지만.. 바로 추천 & 스크랩 들어갑니다.
장기간 사용하지 않는 회원도 있을테니... 코드를 계속 유지해야할수도..
회원 전체가 모두 40바이트로 변경된 것이 확인되면 패스...
스크랩 해놓겠습니다.
감사합니다