본문 바로가기
MySQL Admin Guide/MySQL Ver.5.1 Admin Guide

5장 ACCOUNT , 권한 관리 (1) ACCOUNT 란?

by 모모레 2009. 4. 21.

1. 개요
이제 서버 설치도 끝나고, 문제없이 접근이 가능한 상태임을 확인했으니, 이제 일반계정을 생성하고, 적절한 권한을 부여하는 작업을 통해, MySQL서버에 대한 접근 관리를 해 보도록 하자.

2. ACCOUNT
MySQL은 다른 DBMS와 다른 ACCOUNT 구조를 가지고 있다. MySQL의 ACCOUNT는 user와 host를 합친 개념으로 user@host 의 형태로 구성된다.

MySQL 계정의 구조가 위와 같은 것은 계정에서 접근서버에 대한 접근관리도 같이 이루어 지고 있다는 것을 뜻한다. 즉, 계정을 통해 접근 하는 서버에 대한 접근 권한 체크와 user를 통한 접근 권한 체크가 같이 이루어 지는 것이다. 이와 같은 계정에 대한 정보는 mysql database내의 테이블을 통해 관리된다. mysql.user테이블을 select하면 생성되어있는 account정보를 확인 할 수 있다.

--참고--
MySQL에서의 user의 개념은 오라클의 user의 개념과 다르다. 오라클에서의 user는 접근 제어뿐 아니라 그 user가 사용할 수 있는 일련의 관계가 있는 데이터의 집합 즉, 하나의 스키마와 같은 개념이다. 즉, 하나의 user가 하나의 schema인 것이다. 하지만, MySQL에서의 user는 schema가 아니다. MySQL에서는 user와 schema가 분리되어 관리된다. MySQL에서의 schema는 즉 일련의 관계가 있는 데이터의 집합은 database라고 정의된다.

3. ACCOUNT 생성하기
그러면 이제 ACCOUNT를 생성해보자. ACCOUNT를 생성하는 구문은 다음과 같다.

CREATE USER user [IDENTIFIED BY [PASSWORD] 'password']

이 문장은 CREATE USER권한과 mysql 데이터베이스에 대한 insert권한이 있어야지만 실행이 가능하다. CREATE USER의 실행은 mysql.user 테이블에 row를 하나 추가하는 것과 같은 작업이 진행된다. 이미 존재하는 계정이 있다면 위 구문은 실패할 것이다. CREATE USER 시 IDENTIFIED BY를 이용한 패스 워드 설정은 해도 되고 안해도 되지만, 보안을 위해서는 하는 것이 좋다. 작성하는 패스워드가 password()함수의 사용으로 인한 hash function의 return값으로 인식하게 하고 싶은 경우에는 PASSWORD라는 항목을 사용하면 된다. 참고로, 여기서 user는 위의 구조 처럼 'user'@'host'로 구성되어야 한다.

CREATE USER를 실행하여 계정을 생성하면 이 계정은 어떤 다른 권한은 가지지 않고, 단지 접근만 가능한 usage라는 권한만 가진 계정으로 생성된다.

4. ACCOUNT 삭제하기
ACCOUNT 삭제를 어떻게 하는지 알아보자.

DROP USER user

DROP USER를 하기 위해서는 create user 권한과 mysql 데이터베이스를 delete할 수 있는 권한이 있어야 한다. DROP USER는 하나의 row를 delete하는 작업과 같은 효과를 나타낸다. 참고로 다시 얘기하지만, 여기서 얘기하는 user는 'user'@'host'의 구조로 되어있어야 하고, 4.1 이하의 경우 해당 계정에 권한이 존재하는 경우 DROP USER가 실행되지 않는다. 4.1이하의 MySQL 서버에서는 놀라지 않도록 하자~

5. PASSWORD 설정하기
계정을 생성할때 패스워드를 지정할 수도 있지만, 따로 패스워드를 지정할 수도 있다.

SET PASSWORD [FOR user] =

                PASSWORD('some password')
             | OLD_PASSWORD('some password')
             | 'encrypted password'
}

SET PASSWORD로 패스워드를 지정할때 PASSWORD()나 OLD_PASSWORD()를 사용하면 안에 입력된 스트링을 암호화하여 저장한다. 만약, 위 2개의 함수를 사용하지 않으면, String안의 값이 암호화된 값이라고 판단하고 그냥 입력해 버린다. 다시한번 말하지만, 여기서 말하는 user는 'user'@'host' 를 의미한다.

여기에서 암호화 할때 사용하는 두개의 함수는 버젼에 따라 다른 암호화 방법을 가진 함수로서 만약 client버젼이 MySQL 서버의 버젼보다 낮은 경우 MySQL 서버에 저장된 계정의 패스워드 정보가 맞지 않아서 접속이 실패할 수 있다. 이와 같은 경우에 계정의 패스워드를 OLD_PASSWORD()함수를 사용하여 입력하게 되면 해결이 된다.

6. Account rename하기
Account를 쉽게 rename할 수도 있다.

RENAME USER old_user TO new_user

이 구문을 사용하면 기존 계정의 user나 host변경 시 다른 작업없이 계정만의 변경으로 사용할 수 있게 된다. 이 구문은 CREATE USER와 mysql 데이터베이스에 대한 update권한이 있어야만 사용이 가능하다.