웹마스터 팁

NOP_0x90 Document No.2
-----------------------------------------------------------------------------

         Apache 2.0.46 + php 4.3.2 + mysql 4.0.13 설치하기(Mysql 4.0.13)

-----------------------------------------------------------------------------

작 성 자 : 최훈규(NOP_0x90)
작 성 일 : 2003년 7월 5일
이 메 일 : naneker@hanmail.net
P.S 잘못된 내용은 메일 보내주세요
----------------------------------------------------------------------------

[다운로드]

Apache : http://www.apache.org
php    : http://www.php.net
mysql  : http://www.mysql.com

p.s 반드시 소스파일을 다운받으세요 (확장자 tar.gz)
    경어는 생략하겠습니다.
-----------------------------------------------------------------------------

[설치하기]

p.s SQL을 어느정도 공부하신분정도???...


        mysql데몬이 시작이 됬으면 root 콘솔상에서 mysql을 입력하고 엔터를 누르면 데이타베이스에 접속이 된다.

        [root@localhost /usr/local/mysql/share/mysql]# mysql
        Welcome to the MySQL monitor.  Commands end with ; or g.
        Your MySQL connection id is 109 to server version: 4.0.13

        Type 'help;' or 'h' for help. Type 'c' to clear the buffer.

        mysql>          

        여기에서 mysql데이타베이스에 그냥 접속이 되는것은 아직 설정을 해주지 않았기 때문이다.
        mysql>에서 show databases; 를 입력한후 엔터키를 누른다.
        show databases는 생성된 데이타베이스의 목록을 보는것이다.

        mysql> show databases;
        +----------+
        | Database |
        +----------+
        | test     |
        | mysql    |
        +----------+
        2 rows in set (0.03 sec)

        mysql>

        보면 데이타베이스 목록에는 test와 mysql이라는 데이타베이스가 있다.
        test는 테스트용으로 만들어놓은 DB인거 같다. 아래와 같은 명령어로 삭제할수 있다.
            
        mysql> drop database test;
        +----------+
        | Database |
        +----------+
        | mysql    |
        +----------+
        1 rows in set (0.01 sec)

        mysql>        

        보면 알겠지만 testDB가 삭제된것을 알수가 있다.
        이제 mysql DB로 접속을 하도록 하자 접속은 use명령을 이용하여 접속할수가 있다.
        또 내용을 수정하기위해 connect로 연결을 하도록 하자.

        
        mysql> use mysql;
        Reading table information for completion of table and column names
        You can turn off this feature to get a quicker startup with -A

        Database changed
        mysql> connect mysql;
        Reading table information for completion of table and column names
        You can turn off this feature to get a quicker startup with -A

        Connection id:    118
        Current database: mysql

        mysql>

        이제 접속이 완료되었다. 이제 테이블의 목록을 보도록 하자.

        mysql> show tables;
        +-----------------+
        | Tables_in_mysql |
        +-----------------+
        | columns_priv    |
        | db              |      <- DB의 내용을 담고 있는 테이블
        | func            |
        | host            |
        | tables_priv     |
        | user            |         <- DB 사용자의 내용을 담고 있는 테이블 (접속을 할때 여기에 있는 아이디와 패스워드로 합니다.)
        +-----------------+
        6 rows in set (0.00 sec)
        
        mysql>      

        먼저 접속유저에 대한 내용을 수정하자. 아무나 콘솔상에서 mysql로 들어와버리면 안되지 않는가..
        우선 user테이블의 내용을 보자.(약간 틀릴수도 있습니다.)

        mysql> select * from user;
        +-----------+---------+------------------+-------------+-------------+----------
        ---+-------------+-------------+-----------+-------------+---------------+------
        --------+-----------+------------+-----------------+------------+------------+--
        ------------+------------+-----------------------+------------------+-----------
        ---+-----------------+------------------+----------+------------+-------------+-
        -------------+---------------+-------------+-----------------+
        | Host      | User    | Password         | Select_priv | Insert_priv | Update_pr
        iv | Delete_priv | Create_priv | Drop_priv | Reload_priv | Shutdown_priv | Proce
        ss_priv | File_priv | Grant_priv | References_priv | Index_priv | Alter_priv | S
        how_db_priv | Super_priv | Create_tmp_table_priv | Lock_tables_priv | Execute_pr
        iv | Repl_slave_priv | Repl_client_priv | ssl_type | ssl_cipher | x509_issuer |
        x509_subject | max_questions | max_updates | max_connections |
        +-----------+---------+------------------+-------------+-------------+----------
        ---+-------------+-------------+-----------+-------------+---------------+------
        --------+-----------+------------+-----------------+------------+------------+--
        ------------+------------+-----------------------+------------------+-----------
        ---+-----------------+------------------+----------+------------+-------------+-
        -------------+---------------+-------------+-----------------+
        | localhost | root    |  패스워드부분      | Y           | Y           | Y
           | Y           | Y           | Y         | Y           | Y             | Y
                | Y         | Y          | Y               | Y          | Y          | Y
                    | Y          | Y                     | Y                | Y
           | Y               | Y                |          |            |             |
                     |             0 |           0 |               0 |
        | localhost | test    |                 | Y           | Y           | Y
           | Y           | Y           | Y         | Y           | Y             | Y
                | Y         | Y          | Y               | Y          | Y          | Y
                    | Y          | Y                     | Y                | Y
           | Y               | Y                |          |            |             |
                     |             0 |           0 |               0 |

        +-----------+---------+------------------+-------------+-------------+----------
        ---+-------------+-------------+-----------+-------------+---------------+------
        --------+-----------+------------+-----------------+------------+------------+--
        ------------+------------+-----------------------+------------------+-----------
        ---+-----------------+------------------+----------+------------+-------------+-
        -------------+---------------+-------------+-----------------+
        2 rows in set (0.00 sec)
        
        mysql>            

        와 무지하게 많다. 3.X.X 보다  필드가 더 추가되었다. 무슨내용인지는 필자도 잘은 모르지만 설명은 하겠다.
        먼저 mysql을 입력하면 그냥접속이 되는걸 알수가 있다. 그이유는 위에처럼 패스워드부분에 패스워드가 없기때문이다
        mysql_install_db를 입력하면 저 내용들이 생기게 된다. 처음설치했는데-- 패스워드 있으면 접속은 어떻게 하겠는가ㅡㅡㅋ

        우선 test 사용자부터 지우자 필요없다-- 그리고 root사용자도 지우자


        mysql> delete from user;

        하면 test와 root사용자가 지워지게 된다.
              
        mysql> select * from user;
        Empty set (0.01 sec)

        mysql>            

        보다시피 모든사용자가 지워졌다. 여기에서 루트사용자 까지 지우는 이유는 mysql을 루트로 돌리게 되면 보안상에
        위험이 있다고들 한다. 그렇기 때문에 mysql이라는 사용자로 DB를 관리하도록 하자.
        mysql이라는 사용자를 추가하자 이사용자는 DB의 모든 부분을 건드릴수가 있다.(대장)
        
        mysql> insert into user values ("localhost","mysql",Password("비밀번호"),"Y","Y","Y","Y
        ","Y","Y","Y","Y","Y","Y","Y","Y","Y","Y","Y","Y","Y","Y","Y","Y","Y","","","","
        ","0","0","0");
        Query OK, 1 row affected (0.00 sec)
        
        mysql> select * from user;
        +-----------+---------+------------------+-------------+-------------+----------
        ---+-------------+-------------+-----------+-------------+---------------+------
        --------+-----------+------------+-----------------+------------+------------+--
        ------------+------------+-----------------------+------------------+-----------
        ---+-----------------+------------------+----------+------------+-------------+-
        -------------+---------------+-------------+-----------------+
        | Host      | User    | Password         | Select_priv | Insert_priv | Update_pr
        iv | Delete_priv | Create_priv | Drop_priv | Reload_priv | Shutdown_priv | Proce
        ss_priv | File_priv | Grant_priv | References_priv | Index_priv | Alter_priv | S
        how_db_priv | Super_priv | Create_tmp_table_priv | Lock_tables_priv | Execute_pr
        iv | Repl_slave_priv | Repl_client_priv | ssl_type | ssl_cipher | x509_issuer |
        x509_subject | max_questions | max_updates | max_connections |
        +-----------+---------+------------------+-------------+-------------+----------
        ---+-------------+-------------+-----------+-------------+---------------+------
        --------+-----------+------------+-----------------+------------+------------+--
        ------------+------------+-----------------------+------------------+-----------
        ---+-----------------+------------------+----------+------------+-------------+-
        -------------+---------------+-------------+-----------------+
        | localhost | mysql   |  패스워드부분      | Y           | Y           | Y
           | Y           | Y           | Y         | Y           | Y             | Y
                | Y         | Y          | Y               | Y          | Y          | Y
                    | Y          | Y                     | Y                | Y
           | Y               | Y                |          |            |             |
                     |             0 |           0 |               0 |
        +-----------+---------+------------------+-------------+-------------+----------
        ---+-------------+-------------+-----------+-------------+---------------+------
        --------+-----------+------------+-----------------+------------+------------+--
        ------------+------------+-----------------------+------------------+-----------
        ---+-----------------+------------------+----------+------------+-------------+-
        -------------+---------------+-------------+-----------------+
        2 rows in set (0.00 sec)
        
        mysql>            

        자 이제 mysql권한으로 DB의 모든것을 건들수 있는 사용자가 만들어졌다.
        단, 주의하여야 한다 이제 일반사용자들을 생성할때는 Y 옵션을 모두 N으로 주어야 한다 아래처럼 일반사용자
        계정을 생성하도록 해야한다. 일반사용자에게 DB전체를 건드리는 권한을 주면--;; 하루도 못갈것이다.
    
        mysql> insert into user values ("localhost","아이디",Password("비밀번호"),"N","N","N","N
        ","N","N","N","N","N","N","N","N","N","N","N","N","N","N","N","N","N","","","","
        ","0","0","0");
        Query OK, 1 row affected (0.00 sec)
        
        mysql>

        이제 db 테이블의 내용을 보도록하자.


        mysql> select * from db;
        +-----------+---------+---------+-------------+-------------+-------------+-----
        --------+-------------+-----------+------------+-----------------+------------+-
        -----------+-----------------------+------------------+
        | Host      | Db      | User    | Select_priv | Insert_priv | Update_priv | Dele
        te_priv | Create_priv | Drop_priv | Grant_priv | References_priv | Index_priv |
        Alter_priv | Create_tmp_table_priv | Lock_tables_priv |
        +-----------+---------+---------+-------------+-------------+-------------+-----
        --------+-------------+-----------+------------+-----------------+------------+-
        -----------+-----------------------+------------------+
        | localhost | test%   | test    | Y           | Y           | Y           | Y
                | Y           | Y         | Y          | Y               | Y          |
        Y          | Y                     | Y                |
        | localhost | test%_% | test%_% | Y           | Y           | Y           | Y
                | Y           | Y         | Y          | Y               | Y          |
        Y          | Y                     | Y                |
        +-----------+---------+---------+-------------+-------------+-------------+-----
        --------+-------------+-----------+------------+-----------------+------------+-
        -----------+-----------------------+------------------+
        2 rows in set (0.00 sec)
        
        mysql>    

       db 테이블의 내용을 보면 test% 와 test%_% 라는 DB목록이 있는걸 볼수있다.(다를수도 있음)
       이것은 좀전에 사용자와 DB를 지웠으므로 이것도 모두 지워주도록 하자.

        mysql> delete from db;

        하면 db테이블의 모든 내용이 지워진다.
              
        mysql> select * from db;
        Empty set (0.01 sec)

        mysql>            

        새로운 DB를 추가해보도록 하자.

        mysql> insert into db values ("localhost","DB명","사용자ID","Y","Y","Y","Y","Y","Y","Y","Y","Y","Y","Y","Y");


        그러면 db 테이블에는 다음과 같은 내용이 있을 것이다.
        mysql> select * from db;
        +-----------+---------+---------+-------------+-------------+-------------+-----
        --------+-------------+-----------+------------+-----------------+------------+-
        -----------+-----------------------+------------------+
        | Host      | Db      | User    | Select_priv | Insert_priv | Update_priv | Dele
        te_priv | Create_priv | Drop_priv | Grant_priv | References_priv | Index_priv |
        Alter_priv | Create_tmp_table_priv | Lock_tables_priv |
        +-----------+---------+---------+-------------+-------------+-------------+-----
        --------+-------------+-----------+------------+-----------------+------------+-
        -----------+-----------------------+------------------+
        | localhost | DB명    | 사용자ID  | Y           | Y           | Y           | Y
                | Y           | Y         | Y          | Y               | Y          |
        Y          | Y                     | Y                |
        +-----------+---------+---------+-------------+-------------+-------------+-----
        --------+-------------+-----------+------------+-----------------+------------+-
        -----------+-----------------------+------------------+
        1 rows in set (0.00 sec)
        
        mysql>  

        db 테이블에 사용될 db에 관한 정보를 추가하였다면 db를 추가하도록 하자
        
        mysql> create database DB명;
        Query OK, 1 row affected (0.00 sec)
        
        mysql> show databases;
        +----------+
        | Database |
        +----------+
        |   DB명   |
        |  mysql   |
        +----------+
        1 rows in set (0.00 sec)
        
        mysql>      

        드디어 되었다. DB를 추가하고 show databases;를 해보니 추가된것을 확인할수가 있다.
        이렇게 하였다고 다된것은 아니다
        mysql테이블의 내용이 변경되었다면 업데이트를 해줘야 한다.
        
        mysql> flush privileges;
        
        이렇게 하면 mysql이 업데이트 되게 된다.
        
        이제 exit나 quit로 콘솔로 빠져나가도록하자.

        이제 다음부터 콘솔상에서 mysql 만 입력하거나 mysql -u 아무거나 입력해도 절대 로그인이 되지 않는다.

        [admin@localhost ~]$ mysql
        ERROR 1045: Access denied for user: 'admin@localhost' (Using password: NO)
        [admin@localhost ~]$ mysql -u aksfhsdkhfsadl
        ERROR 1045: Access denied for user: 'aksfhsdkhfsadl@localhost' (Using password:NO)
        [admin@localhost ~]$

        ^^ 앞으로 일반계정으로 들어오는 사람들은 mysql -p DB명으로 로그인 할수가 있다. 사용자를 지정하고 로그인하려면
        mysql -u 사용자id -p DB명
        하면 된다.

        이해 하셨는지???? 이해가 안되었다면 http://nop.codns.com 의 Q&A 란에 질문하기 바란다.

        자 이제 mysql설치가 끝났다.
        다음은 Apache웹서버를 설치할 것이다. NOP_0x90 Document No.3문서를 참고하기 바란다.

제목 글쓴이 날짜
PHP에서의 SQL문 보안취약성 [5] 김영빈 2002.09.09
자동 apm 설치 쉘스크립트(리눅스) [5] file 김동현 2002.09.15
나만의 ftp서버 만들기 제2부 -serv-u 4.0- [12] 레드 2002.10.09
보안설정을 하다^^ 유의할점. [3] Dopesoul 2002.10.14
리눅스 서버를 구축해 보자! #1 [11] 꼬토 2002.11.21
Apache + PHP + Mysql확실한 연동 및 리눅스 재설치 정보 [2] file 최종우 2002.11.26
[FreeBSD] qmail+mysql+vpopmail+qmailadmin 설치 [1] DeX™ 2002.11.26
초보자도 쉽게 이해할수있도록 주석을 자세히 달아놓은 APM 메뉴얼 (3 of 3) [2] Dopesoul 2002.12.21
[초초초(X999)허접강좌]사용자들이 하는 작업 강제 취소,IP막기 [5] -=:{Inuri}:=- 2002.12.21
잊을만하면 알려드립니다. issue.net 과 motd 파일 [5] Dopesoul 2002.12.28
htaccess를 활용하자 3탄! 사용자인증 [4] [쿨럭]블루엔젤 2003.01.23
qmail-1.03설치⑦ (qmailadmin 큐메일 웹관리툴) 비츠로 2003.02.28
qmail-1.03설치⑧ (squirrel웹메일과 연동) 비츠로 2003.02.28
Apache1.3.27 + PHP4.3.1 + MySQL4.0.12 + ZendOptimizer2.1.0 [6] FriZeX 2003.03.19
md5 암호화 알고리즘을 488bit blf 알고리즘으로 바꾸기 [17] 김령현 2003.04.04
ie60이상버전의 개인정보기능으로 인한 서비스문제 [2] 날파리 2003.05.21
[진자 유용한] www 자동으로 붙여주기 [6] Dopesoul 2003.05.24
mysql 강좌 .. 요약본 [4] 이성헌 2003.06.05
NOP_0x90 Document No.2(APM연동 Mysql-DB설정편) NOP_0x90 2003.07.06
apache_2.0.47 + php-4.3.3 + mysql-4.0.16 + zb41pl4 의 windows xp 설치 [3] 기산 2003.10.28