오예의 묵상과 정보가 있는 공간

 


TOTAL ARTICLE : 90, TOTAL PAGE : 1 / 5
구분 웹일반 | 태그-소스 | 제로보드 | 그누보드 |
제로보드 : mysql 4.1에서 제로보드의 호환성 문제 해결
 오예    | 2016·01·15 21:35 | HIT : 224 | VOTE : 16
### 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
와 같은 명령어로 실시간 추가되는 정보를 볼 수 있습니다.
그런데 주의해야 할 점은 로그파일이 너무 커질 수 있으므로
문제가 해결되면 다시 로그기록을 비활성화 시키는 것이 좋습니다.
샬롬~
난! 자유인...
  
90 태그-소스   태그가 적용되지 않게 하는 태그  오예 18·01·10 11 1
제로보드   mysql 4.1에서 제로보드의 호환성 문제 해결  오예 16·01·15 224 16
88 그누보드   그누보드 이미지 리사이즈  오예 15·07·30 360 24
87 태그-소스   video 태그  오예 14·06·19 602 24
86 그누보드   DHTML 에디터 이미지 새창으로 안뜨게 하려면  오예 15·05·17 341 28
85 그누보드   그누보드 이미지 클릭시 팝업창 뜨는 문제  오예 13·04·24 918 38
84 웹일반   플래시 위에 레이어 팝업창 띄우기  오예 12·11·09 1038 32
83 그누보드   코멘트 줄간격 조정  오예 12·09·03 790 31
82 웹일반   해상도에 따라 변하는 레이어 위치 고정하기  오예 12·08·16 783 30
81 태그-소스   플래시에 레이어창 위로 올라오게 하기  오예 11·10·04 959 36
80 태그-소스   플래시 object태그(배경 투명)  오예 11·08·22 1195 40
79 웹일반   onfocus="this.blur()"  오예 11·08·22 1162 53
78 태그-소스   이미지맵에서 롤오버 만들기  오예 11·07·31 1339 43
77 그누보드   그누보드 토큰 에러  오예 11·07·29 1858 56
76 제로보드   제로보드 관리자 비번 잊어버렸을때  오예 11·06·28 1724 44
75 웹일반   레이어 팝업창 소스  오예 11·05·16 1927 74
74 태그-소스   홈페이지 주소창에 로고 넣기  오예 11·05·03 1946 78
73 태그-소스   동영상 플레이어 100%,200%,전체화면 스크립트  오예 10·05·30 2580 122
72 태그-소스   레이어 팝업창  오예 10·04·13 2540 155
71 그누보드   그누보드 회원삭제 안될때  오예 10·03·06 2842 165
12345
Copyright 1999-2018 Zeroboard / skin by GGAMBO

페이스북

신광교회

진해남부교회

아름다운교회

칠원교회

ke3