mysql 버젼업에 따른 패스워드 문제 해결~! - 수정본 정보
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);
}
}
-----------------------------------------
추천
4
4
댓글 15개
흐~ 제가 수정하려구 생각만 하던거를 수정하셨네요. 감솨...
제가 감사드려야죠.
아빠불당님께서 예전에 작성하셨던 걸 보고 이번에 호스팅 이전하면서 바로 적용했거든요.^^;
아빠불당님께서 예전에 작성하셨던 걸 보고 이번에 호스팅 이전하면서 바로 적용했거든요.^^;
좋은팁 감사합니다.
반대로 old_password로 변경될 경우도 같이 넣어주시면 어떨가요??
반대로 old_password로 변경될 경우도 같이 넣어주시면 어떨가요??
일반적으로 mysql 버젼업이 되면서 발생하는 문제라서 반대의 경우는 잘 없을것 같은데요. 혹시 필요하시면 sql_password 와 sql_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 패스워드를 사용하는 호스팅으로 이전하는 경우에만 사용하시면 됩니다.
-----------------------------------------
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패스워드는 대소문자를 구분합니다.");
}
$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패스워드는 대소문자를 구분합니다.");
}
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바이트로 변경된 것이 확인되면 패스...
장기간 사용하지 않는 회원도 있을테니... 코드를 계속 유지해야할수도..
회원 전체가 모두 40바이트로 변경된 것이 확인되면 패스...
감사합니다.
감사합니다.^^
서버 날라가서 세로 셋팅하면서 이 문제에 걸려버렸네요
스크랩 해놓겠습니다.
감사합니다
스크랩 해놓겠습니다.
감사합니다
찾고 있었는데..
mysql버전업으로 인한 로그인 문제 해결