홈>컴퓨터이야기
logo_01.gif


TOTAL ARTICLE : 35, TOTAL PAGE : 1 / 2
구분 웹일반 | 태그-소스 | 제로보드 | 그누보드 |
제로보드 : mysql 4.1에서 제로보드의 호환성 문제 해결
 오예    | 2016·01·15 21:35 | HIT : 327 | VOTE : 25
### Mysql 4.1.x 에서 제로보드 사용하기
파일명 : zb41pl4.tar.Z


Mysql 4.1 버전에서 제로보드 호환에 문제가 되는 이유

1. PASSWORD 함수의 사용바이트 수 증가
기존 4.0 까지의 password() 함수는 함호화를 위해 16 바이트를
사용했는데 4.1 부터는 41 바이트를 사용합니다.
그리고 4.1 에서 4.0 이전의 16 바이트 함수는 old_password() 라는
이름으로 바뀌었습니다.

아래는 4.1 에서의 간단한 예입니다.

mysql> select password('aabbcc');
+-------------------------------------------+
| password('aabbcc') |
+-------------------------------------------+
| *2413A83E64BC8C0B97D3072004D15A19E48A1C00 |
+-------------------------------------------+
1 row in set (0.00 sec)

mysql> select old_password('aabbcc');
+------------------------+
| old_password('aabbcc') |
+------------------------+
| 2cbf598202278785 |
+------------------------+
1 row in set (0.00 sec)

mysql> select length(password('aabbcc'));
+----------------------------+
| length(password('aabbcc')) |
+----------------------------+
| 41 |
+----------------------------+
1 row in set (0.00 sec)

mysql> select length(old_password('aabbcc'));
+--------------------------------+
| length(old_password('aabbcc')) |
+--------------------------------+
| 16 |
+--------------------------------+
1 row in set (0.00 sec)



2. 테이블 생성 스키마 제한

제로보드에서 새 테이블을 생성할때 소스 디렉토리의 schema.sql 이라는 파일을
통해서 생성합니다.
Mysql 4.1 에서는 create table 에서

create table $admin_table (
no int(11) default '0' not null auto_increment primary key,
group_no int(20) unsigned not null,
....

와 같이 auto_increment 옵션을 준 칼럼에 default '0' 과 같은
디폴트 값을 같이 사용할 수가 없습니다.

그렇게 사용하면 아래 처럼 에러가 납니다. 당연히 제로보드에서
테이블 생성이 안됩니다.


mysql> create table aaaa ( id int default '0' not null auto_increment primary key );
ERROR 1067 (42000): Invalid default value for 'id'

mysql> create table aaaa ( id int not null auto_increment primary key );
Query OK, 0 rows affected (0.01 sec)




위 두가지만 잘 이해하면 Mysql 4.1 에서 제로보드 사용시 발생하는 에러들의 원인을
찾을 수가 있습니다.
좀더 구체적으로 보면..


[무조건 해야하는 작업]

제로보드를 처음으로 설치해서 사용하든 이전 제로보드데이타와 소스를 옮기든지
반드시 무조건 해야하는 작업은 schema.sql 이라는 파일에서
default '0' not null auto_increment 이부분에서 default '0' 을 삭제합니다.
모든 default '0'을 삭제하는 것이 아니라 반드시 auto_increment 와 같이 사용되는
칼럼의 default '0' 을 삭제합니다.

그리고 패스워드 저장하는 칼럼의 크기도 이전 20 에서 41 로 늘려주는 것이
좋습니다. 아래에서 다시..










[ 4.1 버전의 새 password() 함수를 사용할 경우]

최초로 제로보드를 깔아서 사용하려는 사람들에게 적용될 듯합니다.
좀더 보안이 강화된 4.1 버전의 password 함수를 사용하려면 php 소스는
그대로 두고 schema.sql 파일을 추가 수정해야 합니다.

위에서는 schema.sql 의 default '0' 부분만 수정했는데
이번에는 password 를 저장하는 칼럼의 크기를 늘려야 합니다.

기존의 password 칼럼은 20 혹은 18 등의 크기로 되어 있는데

password char(20)

이부분을 41 로 수정해 줍니다.
schema.sql 에서

29 라인의 password char(20) not null,
38 라인의 jumin char(18),
234 라인의 password char(20),
288 라인의 password char(20),


모두 4 곳을 41 로 크기를 수정해 줍니다.
제로보드에서는 주민등록번호도 암호화를 하므로 jumin 칼럼도
수정해 줘야 합니다. 이 외에도 빠진부분이 있는지는 각자 알아서
체크해보시길.

이와 같은 작업은 실제 설치를 시작하게 전에 해줘야 합니다.
수정하지 않고 설치후 에러가 났을 경우에는 생성된 DB 를
삭제해주고 config.php 파일을 삭제한후 다시 install.php 를
실행해서 첨부터 다시 설치를 하시면 됩니다.




[이전 4.0 이하 버전의 password() 함수를 그대로 사용할 경우]

4.0 이전의 password()함수는 mysql 4.1x 에서는 old_password() 라는
함수로 사용할 수 있습니다.
이미 mysql 4.0 이하버전에 제로보드로 많은 회원과 게시판들을 운영하고
있었던 경우 그 데이타를 그대로 살리면서 4.1로 옮길때 적용할 수 있습니다.

우선 제로보드의 php 소스에서 사용된 모든 password() 함수를 old_password() 함수로
고치면 됩니다. 말이 쉽지 작업하기 장난 아닙니다.
일단 어떤 소스에서 password() 함수를 쓰는지 보려면..

[root@haansoft bbs]# pwd
/var/www/html/bbs
[root@haansoft bbs]# grep -R -i -l "password(" ./*
./admin/admin_exec_member.php
./admin/admin_view_member.php
./comment_ok.php
./del_comment_ok.php
./delete_ok.php
./install2_ok.php
./login_check.php
./lostid_search.php
./member_join_ok.php
./member_modify_ok.php
./member_out.php
./view.php
./write_ok.php
[root@haansoft bbs]#

와 같은 파일들이 password() 함수를 씁니다. 구체적인 라인의 내용을 보려면
grep -R -i "password(" ./* 와 같이 -l 옵션을 빼고 grep 명령을
내려보면 됩니다.
위 13 개 파일을 열어서 password("$password") 와 같은 부분을
old_password("$password") 와 같이 수정해 주면 됩니다.



[기타]

원인을 알 수 없는 에러의 경우 로그파일에 기록을 남기면 그것을
보고 해결책을 찾을 수가 있습니다. 한소프트리눅스2005 에서는
기본으로 mysql 의 로그를 남기지 않습니다.
남기려면
/etc/my.cnf 파일을 에서 [mysqld] 영역 아래에

log=/var/log/mysqld.log

와 같이 log 파일을 지정해 주고 mysql 데몬을 재시작하면
소스에서 select 등의 sql 문 실행모습을 볼 수 있습니다.
쉘에서
# tail -f /var/log/mysqld.log
와 같은 명령어로 실시간 추가되는 정보를 볼 수 있습니다.
그런데 주의해야 할 점은 로그파일이 너무 커질 수 있으므로
문제가 해결되면 다시 로그기록을 비활성화 시키는 것이 좋습니다.
샬롬~
난! 자유인...
  
제로보드   mysql 4.1에서 제로보드의 호환성 문제 해결  오예 16·01·15 327 25
34 제로보드   제로보드 관리자 비번 잊어버렸을때  오예 11·06·28 1826 49
33 제로보드   최근게시물에 비밀글도 출력하기  오예 09·10·21 2945 215
32 제로보드   제로보드 2009.9.22 보안 취약점 패치  오예 09·09·29 4830 291
31 제로보드   지엠스팸프리(ZmSpamFree)  오예 09·08·30 2772 187
30 제로보드   제로보드 관리자계정 접속이 안될때  오예 09·07·12 2629 151
29 제로보드   갤러리에 한글이름 적용하기  오예 09·06·29 3628 217
28 제로보드   DQ Revolution 1.8.p9 최근갤러리에 썸네일 불러오기  오예 09·03·20 3660 149
27 제로보드   제로보드 스팸방지기능(ZM_Crypt 2.0)  오예 09·02·06 3885 191
26 제로보드   제로보드 서버 이전 방법  오예 08·09·19 3758 230
25 제로보드   제로보드 스팸광고게시물,덧글 자동등록 방지 ZM_Crypt 2.0  오예 08·08·19 3035 181
24 제로보드   미니위니 에디터 FAQ  오예 07·10·31 5517 121
23 제로보드   제로보드 스팸 차단하기  오예 07·05·03 3581 68
22 제로보드   새계정 이사할때, 그대로 옮기기 - DB백업,복구, data백업,복구 방법, 권한설정  오예 07·03·10 1981 67
21 제로보드   최근게시물에 답글과 비밀글 표시하기  오예 06·12·26 2408 64
20 제로보드   최고 관리자 아이디, 비밀번호 잃어버렸을때  오예 06·08·21 1910 75
19 제로보드   그림 파일명에 한글이 포함될 경우 영문자, 숫자로 이름 자동 변경하기  오예 06·07·03 2101 73
18 제로보드   제로보드 게시물 순서 바꾸기  오예 06·06·19 1905 74
17 제로보드   최근 게시물을 나타내는 원리와 방법  오예 06·05·27 1799 77
16 제로보드   특정 회원사진 출력 안되는 문제  오예 06·05·01 1663 58
12
Copyright 1999-2019 Zeroboard / skin by GGAMBO