본문으로 바로가기


9장. 웹 데이터베이스 만들기(p. 278)


1. mysql monitor 사용하기

- ';'(세미콜론) : 명령어를 실행시키라고 명령한다는 뜻. (mysql에서의 명령어들은 ';'로 끝남)

- ';'를 실수로 빠드리면 아무것도 실행되지 않음. but, ';'를 생략하면 다음 줄로 넘어 갈수 있다.

ex. mysql> grant select

                ->

- '->'는 mysql이 입력을 더 받아야 하기 때문에 기다리고 있다는 뜻. ';'를 입력하지 않고 enter를 치면 '->' 가 나온다

- mysql 명령어는 대소문자를 구분하지 않지만 데이터베이스와 테이블 이름은 대소문자 구별


2. mysql에 접속하기

- mysql -h hostname -u username -p : 서버에 접속하는 명령어

- '-h' : mysql 서버가 실행되고 있어 접속해야하는 주소 입력

- '-u' : '-u'뒤에는 username 즉, 접속해야하는 사용자 이름을 적는다. '-u'와 'username' 파라미터가 없으면 기본적으로 운영체제에 접속한 사용자 입력이 대신 들어감. mysql를 설치했다면 맨 처음에는 오직 루트(root)만 접속 할 수있다.

- '-p' : 비밀번호를 뜻함. 아직 비밀번호가 설정 되어있지 않다면 '-p'없이 접속하면 됨

   만약 입력하지 않고 명령문을 끝냈다면 Enter password : 라고 화면에 출력되므로 이때 비밀번호를 입력하면 된다

- 위와 같이 실행되지 않는다면 mysql_install_db가 실행되지 않았는지, 루트 비밀번호를 설정하였는지, 입력들이 잘못되었는지 확인 할 것.


3. 사용자와 데이터베이스 만들기

- mysql > create databease dbname;

   : 데이터베이스 생성. dbname 대신에 원하는 데이터베이스 이름 입력

ex. create database books;        => books라는 데이터베이스 생성


4. 사용자와 권한 설정

- mysql은 많은 사용자가 사용하는데 root(기본 username)은 보안상의 이유때문에 주로 관리를 위해서 사용.

- 따라서 사용자 각각의 계정과 비밀번호가 설정되어 있어야 하고 다른곳(ex. 유닉스, 윈도우즈 NT의 사용자 아이디와 비밀번호)와 같은 필요는 없다.


5. mysql의 권한 시스템

- mysql의 장점 중 하나는 정교한 권한 시스템이라는 것.

- 여기서 권한이란 ? 특정 사용자가 특정한 곳에 접근하고 실행시킬 수 있는 권리, 한도를 뜻함

- 파일에서의 퍼미션(permission)과 같은 개념


5-1) 최소 권한의 원칙

- 어떤 컴퓨터 시스템에서든지 권한을 가능한 한 최소로 주는 것이 보안상 좋음

- 사용자(혹은 프로세스)는 할당된 일을수행하기 위해 가장 최소의 권한만을 가져야 한다


5-2) 사용자 설정 : GRANT 명령어

7-1) GRANT와 REVOKE 명령어는 mysql사용자의권한을 다음 4단계로 조절하는 명령어

- Global

- Database

- Table

- Colum

7-2) GRANT 명령어는 사용자를 새로 만들고 권한을 주는 명령어

ex. GRANT privileges [columns] ON item

TO user_name [IDENTIFIED BY 'password']

[REQUIRE ssl_options]

[WITH [GRANT OPTION | limit_option] ]

- '[]'에 이는 것은 옵션 임.

- 'privileges' : 허용해 줄 권한들. (권한이 여러개 일경우 ','로 구분)

- 'colums' : 이 권한을 열 단위로 지정해 줄 수 있다. 권한이 적용되는 열이름을 이안에 써주고 여러개일 경우 ','로 구분

- 'item' : 권한들이 적용되는 데이터 베이스나 테이블으 이름을 넣어줌. 권한을 모든 데이터베이스에 적용되게 하려면 *.*라고 입력.

             이를 전역적인 권한이라고 함. *라고 사용할 수 있음.

             ex. 모든 테이블 권한을 설정할 때 : dbname.*

                  특정 데이터베이스의 특정 테이블 : dbname.tablename (또한 colums도 적어줄 수 있음)

             위의 예시처럼 데이터베이스, 테이블, 열에 대해 각각권한을 지정할 수 있다.

- 'user_name' : mysql에 접속한 사용자 이름을 적음. (로그인 하는 이름과 다르다는 점 주의) 이떄, 사용자 이름은 호스트 이름까지 포함

   ex. laura(laura@localhost와 같음)라고 하거나 laura@somewhere.com이라고 해야 함

- 'password' : 사용자의 비밀번호 입력.

- REQUIRE 절 : 사용자가 SSL(Secure Sockets Layers)을 통해서만 접속할 수 있다고 정하는 데 사용. SSL 옵션을 정할 수 도 있음

- 'WITH GRANT OPTION' : 어떤 사용자가 다른 사용자에 대한 권한을 설정할 수 있게 해줌.

   ex. MAX_QUERIES_PER_HOUR n 또는 MAX_UPDATES_PER_HOUR n 또는 MAX_CONNECTIONS_PER_HOUR n

   이 절들은 한 사용자의 시간당 쿼리, 업데이트, 접속 수를 제한하는 데 사용. 한 사용자가 시스템에 주는 부하를 제한하는 사용

- 권한은 mysql이라는 데이터베이스 안에 4개의 시스템 즉, musql.user, mysql.db, mysql.table_priv, mysql.colums_priv안에 저장됨


5-3) 권한의 종류와 레벨

- 사용자에 대한 것과 관리자를 위한것, 특별한 경우를 위한 것 세가지로 구분 (보통 사용자와 관리자를 위한 것이 기본)

- 다음 테이블은 사용자에 대한 권한에 개념설명.

- 적용대상이란 권한이 어떤곳에 적용되는 것인지

권한

 적용대상

 설명

 SELECT

 테이블, 열

 사용자가 테이블에서 어떤 행(즉 기록된 데이터)을 선택할 수 있게 허가함

 INSERT

 테이블, 열

 사용자가 테이블에 새로운 행을 삽입할 수 있게 함

 UPDATE

 테이블, 열

 사용자가 이미 존재하고 있는 행을 변경 할 수 있게 함

 DELETE

 테이블

 사용자가 테이브르이 행을 지울 수 있게 함

 INDEX

 테이블

 사용자가 특정 테이블에 인덱스를 만들거나 없앨 수 있게 함

 ALTER

 테이블

 사용자가 테이블의 구조를 바꿀 수 있게 함. 즉, 열을 하나 추가한다거나, 열 또는 

 테이블의 이름을 바꾼다거나, 열의 데이터 형을 변경할 때 쓰임

 CREATE

 데이터베이스, 테이블

 사용자가 새로운 데이터베이스나 테이블을 만들 수 있게 함.

 grant 명령에 특정 데이터베이스나 테이블이 명시되어 있다면,

 이 사용자는 명시된 데이터 베이스 또는 테이블만 만들수 있음

 (이때 데이터베이스, 테이블이 존재하고있다면 이 CREATE를 실행하기 전에

  DROP부터 해야 함을 의미)

 DROP

 데이터베이스, 테이블

 사용자가 데이터베이스나 테이블을 지울 수 있게 함

- 위 표에 나온 권한 이외에 REFERENCES와 EXECUTE라는 권한이 있는데 지금은 사용하지 않음.

- GTRAN를 실행할 수 있는 권한은 WITH GRANT OPTION으로 주어짐

- 다음 표는 관리자를 위한 권한

권한

설명

 CREATE TEMPORARY TABLES

 관리자가 CREATE TABLES문에 TEMPORARY 키워드를 사용할 수 있게 한다

 FILE

 파일의 데이터가 테이블로 읽혀지는 것을 가능하게 한다 (그 반대도 가능)

 LOCK TABLES

 LOCK TABLES문을 직접 사용 할 수 있게 한다

 PROCESS

 관리자가 사용에게 속한 서버에서 실행되는 프로게스들에 대해서 볼 수 있게 함

 RELOAD

 관리자가 GRANT 테이블을 다시 불러들여 권한, 호스트, 로그, 테이블 등을 플러시(FLUSH)

 할 수 있게 함

 REPLICATION CLIENT

 복사 마스터와 슬레이브에 대해 SHOW STATUS를 할 수 있다.

 REPLICATOPM SLAVE

 복사 슬레이브 서버가 마스터 서버에 접속할 수 있게 한다

 SHOW DATRABASES

 SHOW DATABASES를 통해 모든 데이터베이스를 볼 수 있음 이 권한이 없다면 사용자는

 다른 권한을 가진 데이터베이스만 볼 수 있다

 SHUTDOWN

 관리자가 MYSQL 서버를 정지시킬 수 있게 함

 SUPER

 관리자가 사용자에게 속한 스레드를 중지시킬 수 있다.

- 위와 같은 권한을 일반 사용자에게도 허용할 수 있지만 각별한 자의가 필요함.

- 일반 사용자들은 RELOAD, SHUTDOWN, PROCESS와 같은 일들을 할 필요는 없지만, FILE이라는 권한은 약간 특별함.

- 다음은 특별한 권한에 대한 설명이다.

권한

설명

 ALL

 사용자 권한, 관리자 권한에 나온 펴에 대한 모든 권한을 다 준다는 뜻.
 ALL PRIVILEGES라고도 함

 USAGE

 어떤 권한도 주지 않음. 따라서 접속은 할 수 있지만 아무 일도 할 수 없다.

 나중에 권한을 더 줄 수 있다.


5-4) REVOKE 명령어

- GRANT와 반대로 사용자로부터 권한을 뻇을때사용

   ex. REVOKE privileges[(columns)]

        ON item

        FROM user_name

- 이전에 WITH GRANT OPTION 구문으로 권한을 부여할 수 있는 권한을 주었다면, 이를 뻇을 때에는 다음과 같이 사용

   ex. REVOKE ALL PRIVILEGES, GRANT

        FROM user_name


5-5) GRANT와 REVOKE를 사용한 예제

ex. mysql> grant all

            -> on *

            -> to fred identified by 'mnb123'

            -> with grant option;

     :  이렇게 하면 비빌번호 mnb123으로 접속하는 fred라는 사용자에게는 모든 데이터 베이스에 대한모든 권한이 다 허용되고,

        fred는 다른 사용자에게 권한을 부여할 수도 있게 됨

- 권한 취소 :

ex. mysql > revoke all privilages, grant

             -> from fred;

- 일반 사용자 설정 :

ex, mysql > grant usage

             -> on books.*

             -> to sally identified by 'magic123';

- sally가 어떤 권한이 필요한 지를 결정 한 후에는 다음과 같이 하여 팔요한 권한만을 설정

(이렇게 할 때에는 sally의 비밀번호가 필요하지 않음) :

ex. mysql > grant select, insert, update, delete, index, alter, create, drop

             -> on books.*

             -> to sally;

- 위와 같은 권한 중 일부 취소 :

ex. mysql > revoke alter, create, drop

             ->on books.*

             ->from sally;

- sally가 데이터베이스에 더 이상 접근하지 못하게 하고 싶으면 다음과 같이 모든 권한을 다 뺏음

ex. mysql > revoke all

             -> on books.*

             -> from sally;


6. 웹을 위한 사용자 설정

- 대부분의 경우 테이블에 한줄을 입력하거나 변경, 삭제할 수 있는 select, insert, delete, update 이 네가지면 충분하다.

   이 네가지 만 권한주기 ?

   ex. mysql > grant select, insert, delete, update

                ->on books.*

                ->to bookorama detified by 'bookorama123';

- 웹 스크립트에 이런 명령어를 모두 사용하고 싶다면 다음과 같은 명령을 싱행

  ex. mysql > grant select, insert, update, delete, index, alter, create, drop

               -> on books.*

               -> to bookorama indentified by 'bookorama123';


6-1) 관리자 계정 나가기

- quit 명령을 입력하면 mysql 모니터 종료


continue 4!