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 |
사용자 권한, 관리자 권한에 나온 펴에 대한 모든 권한을 다 준다는 뜻. |
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!