본문 바로가기

스크립트/그누보드 관련

mysql 버젼업에 따른 패스워드 문제

 
웹호스팅 또는 서버호스팅에 따라서 mysql의 버젼이 꽤 많이 차이가 나는게
4.0.x와 4.1.x 이후 버젼 사이에는 패스워드 포맷이 달라지는 중대한 변화가 있습니다.
 
그 결과 4.0.x의 패스워드는 4.1.x 이후에서는 인식될 수가 없습니다.
 
mysql에서는 편법으로 서버 옵션으로 --old_password 라는 것을 제시해서 4.1.x 이후에도
옛날의 허술한 패스워드를 쓸 수 있게 해주고 sql에서도 old_password라는게 있습니다.
 
그러나 이것은 진정한 문제의 해결이 아니고 문제를 잠시 덮어주는 역활만을 하는 것이죠.
 
 
제가 5.0.41로 버젼업을 하면서 옛날의 4.0.x의 패스워드가 먹히게 하기 위해서 ...
 
 
/lib/common.lib.php 에 다음 함수를 추가 합니다.
 
function sql_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];
}
 
 
/bbs/login_check.php의 15라인을 다음과 같이 수정 합니다.
 
if (!$mb[mb_id] || (sql_password($mb_password) != $mb[mb_password] and sql_old_password($mb_password) != $mb[mb_password]))
 
 
/bbs/register_form.php의 66라인을 다음과 같이 수정
 
    if (!($member[mb_password] == sql_password($_POST[mb_password]) && $_POST[mb_password]) && !($member[mb_password] == sql_old_password($_POST[mb_password]) && $_POST[mb_password]))
 
그러면 새로운 사용자는 새로운 패스워드로, 옛날 사용자는 옛날 패스워드로 login check를 하게 됩니다.

http://sir.co.kr/bbs/board.php?bo_table=g4_tiptech&wr_id=11718