태터데스크 관리자

도움말
닫기
적용하기   첫페이지 만들기

태터데스크 메시지

저장하였습니다.


### 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
와 같은 명령어로 실시간 추가되는 정보를 볼 수 있습니다.
그런데 주의해야 할 점은 로그파일이 너무 커질 수 있으므로
문제가 해결되면 다시 로그기록을 비활성화 시키는 것이 좋습니다.
신고
Posted by 루나 norae


티스토리 툴바