mysql old_password 설정 > 그누4 질문답변

그누4 질문답변

그누보드4 관련 질문은 QA 로 이전됩니다. QA 그누보드4 바로가기
기존 게시물은 열람만 가능합니다.

mysql old_password 설정 정보

mysql old_password 설정

본문

안녕하세요
디비서버 이전에 대한 문제를 문의드립니다. 서버이전을 했습니다.
마이 sql 버전 MySQL client version: 5.0.27 에서 => MySQL client version: 5.0.51a
으로 이전했는데, 새로 이전한 서버는 패스워드 암호화 방식을 14바이트로 고정했다고 합니다.
(mysql 4. 이전 버전의 암호화 방식) 이전 디비는 41바이트 암호화로 저장되었고 이전될 서버는 14바이트 암호화 방식으로 고정되었다고 합니다.

그러니까 문제는 이전해야할 디비는 윗버전인데 이전할 디비는 하위버전이 되어 버렸습니다.
(윗버전 -> 아랫버전;    으로 이전 과 같은 결과가 되었습니다.
(암호화 방식만,,,) 그래서 회원 로그인 부분이 안됩니다. 호스팅사에 문의해 보니

아래와 같은 소스 코드로 41바이트 암호화 방식을 복구 할수 있다고 합니다.
<?php
$connect = mysql_connect("localhost", "user", "password");
mysql_select_db("mysql", $connect);
mysql_query("set variables old_passwords=0", $connect); // --> old_passwords OFF (참고로 show variables like ‘old%’; 명령을 통해 현재 설정 확인 가능)
mysql_query("update user set password=password('abc') where user = 'abc'");
?>

그런데 문제는 위의 소스코드를 적용해도 41바이트 암호화 방식이 안됩니다.

문제를 다시 정리하면 새로 이전될 디비서버가 암호화 방식만 옛날 버전으로 세팅되어 있어서 php소스로 암호화 방식을 바꾸어야 하는데 찾지 못하고 있습니다.

혹시 방법을 아시는 분 있으시면 도와주세요

댓글 전체

팁을 잘 검색해보면 답이 있습니다. 제가 작년에 올려둔 코드죠.

lib/common.lib.php에서

function sql_password($value)
{
    // mysql 4.0x 이하 버전에서는 password() 함수의 결과가 16bytes
    // mysql 4.1x 이상 버전에서는 password() 함수의 결과가 41bytes

    // mysql 4.1x 이상 버젼에서도 password() 함수의 결과가 16bytes가 되어서
    // 41바이트의 기존 비밀번호 때문에 로그인 오류가 나는 경우에는 아래 코멘트를 풀어주세요
    // 마루호스팅에서 테스트 했습니다.
    sql_query("set old_passwords=0");

    $row = sql_fetch(" select password('$value') as pass ");
    return $row[pass];
}
오래된 게시글이지만 초보인 제가 이것 저것 하다가 해결한 방법도 적어봅니다.
저는 예전 DB와 지금의 DB를 함께 써야 해서 password가 2가지를 혼용해야 했습니다.
그래서

lib/common.lib.php에

function sql_password_old($value)
{
    $row = sql_fetch(" select old_password('$value') as pass ");
    return $row[pass];
}
를 추가해주고,

bbs/ login_check.php
에서
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_password_old($mb_password) != $mb[mb_password]))) {
    alert("가입된 회원이 아니거나 패스워드가 틀립니다.\\n\\n패스워드는 대소문자를 구분합니다.");
}
로 수정했습니다.
전체 66,558 |RSS
그누4 질문답변 내용 검색

회원로그인

(주)에스아이알소프트 / 대표:홍석명 / (06211) 서울특별시 강남구 역삼동 707-34 한신인터밸리24 서관 1404호 / E-Mail: admin@sir.kr
사업자등록번호: 217-81-36347 / 통신판매업신고번호:2014-서울강남-02098호 / 개인정보보호책임자:김민섭(minsup@sir.kr)
© SIRSOFT