본문 바로가기

Database

[MySQL] 사용자 계정 관리

서버 관리를 하다보면 mysql 사용자 계정을 추가해 줄때가 있다

./mysqladmin -V 버젼명 (테이터베이스 관리 tool)

./mysqladmin -p status 현재상태

 

데이터베이스 종류 보기

mysql> show databases;

 

mysql 상의 테이블 정보 보기

mysql> show tables from mysql;

 

데이터 베이스 생성

mysql> CREATE DATABASE testDB;

 

편집후에 반드시 mysql 재가동해야함.

# mysqladmin -u root -p reload

 

첫번째 방법은 아주 간단하다 한번에 끝낼수 있다.

GRANT ALL PRIVILEGES ON [DB명].[테이블명(*)] TO '[유저명]'@'[서버명]' IDENTIFIED BY '[암호]' WITH GRANT OPTION;

GRANT ALL PRIVILEGES ON GROUPWARE.* TO 'test'@'192.168.1.%' IDENTIFIED BY 'testtest' WITH GRANT OPTION;

"WITH GRANT OPTION" 옵션은 다른 유저에게 권한 부여 여부다.

 

두번째 방법은 세밀하게 권한을 부여할 수 있는 방법이다. 일단 유저를 먼저 생성을 한다.

GRANT ALL PRIVILEGES ON [DB명].[테이블명(*)] TO [유저명]@[서버명] IDENTIFIED BY '[암호]' ;

유저를 생성후 권한을 한번에 줄수있다.

 

GRANT ALL ON [DB명].[테이블명(*)] TO [유저명]@[서버명];

특정 권한만 선택적으로 적용할 수 있다.

 

GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, INDEX, ALERT ON [DB명].[테이블명(*)] TO [유저명]@[서버명];

마지막으로 계정 권한을 새로 로드시켜 준다.

 

FLUSH PRIVILEGES;

권한 삭제는 GRANT 명령어 반대로 하면 된다.

 

REVOKE ALL ON [DB명].[테이블명(*)] TO [유저명]@[서버명];

특정 권한만 삭제할 수 있다.

 

REVOKE SELECT ON [DB명].[테이블명(*)] TO [유저명]@[서버명];

권한만 삭제한다고 유저가 삭제되진 않는다. 아래와 같이 해줘야 완벽하게 유저가 제거된다.

 

DROP USER [유저명]@[서버명];

 

mysql이 외부로도 서비스가 가능하게 하려면, 몇 가지의 확인사항과 그 외에 추가적인 설정을 해야 할 필요가 있습니다.

mysql이 설치된 서버의 운영체제를 명시해주시지 않아서, 유닉스 계열 운영체제라 가정하고 설명드리겠습니다.

 

#1.

우선, 기본적으로 mysql 은 tcp 3306 번 포트를 통해 서비스를 제공합니다.

따라서, 외부에서 DB에 접근할 수 있도록 하기 위해서는 서버의 tcp 3306 번 포트가 방화벽에 막혀 있지는 않은지 확인해야 하며

만약 막혀 있을 경우 열어주어야 합니다.

iptables -L 명령으로 차단/허용 리스트 조회가 가능합니다. 만약 포트가 막혀 있을 경우,

# iptables -I INPUT -p tcp --dport 3306 -j ACCEPT

 

명령으로 열어주시면 됩니다.

 

#2.

그 다음에는 DB 사용자 계정에 외부에서의 접근 권한을 부여해야 합니다.

외부에서 DB에 접근할때만 사용하는 계정을 새로 생성해도 됩니다. '%' 의 의미는 외부에서의 접근을 허용한다는 의미입니다.

기존에 사용하던 계정에 외부 접근 권한을 부여하려면, Host를 '%' 로 하여 똑같은 계정을 추가해줍니다.

 

mysql> USE mysql;

mysql> INSERT INTO user (Host, User, Password) VALUES ('localhost', '계정아이디', password('비밀번호'));

mysql> INSERT INTO user (Host, User, Password) VALUES ('%', '계정아이디', password('비밀번호'));

mysql> FLUSH privileges;

계정이 생성되었다면, 그 계정이 접근할 수 있는 데이터베이스를 생성하고 권한을 부여해야 합니다.

 

mysql> CREATE DATABASE 데이터베이스명;

mysql> GRANT ALL privileges ON 데이터베이스명.* TO 계정아이디@locahost IDENTIFIED BY '비밀번호';

mysql> GRANT ALL privileges ON 데이터베이스명.* TO 계정아이디@'%' IDENTIFIED BY '비밀번호';

 

이렇게 방화벽을 열고, 계정에 접근 권한을 부여하는 과정을 거치면

외부로 DB 서비스를 제공할 수 있게 됩니다.