본문 바로가기

MySQL/MySQL Admin

mysql_config_editor 설정하기

정말 또 다시 오랜만에 글을 적게 되네요 ㅎ


우연치 않게 블로그를 보시는 분을 만나고 나서.. 다시 시작해야겠구나 생각을 해가지고 ㅋㅋㅋ 신기방기한 만남이었습니다.


이직 한 이후에 회사에서 생소하게 쓴 mysql_config_editor를 설명해 보려합니다.


전에 회사에서는 5.5 version을 썼기 때문에 존재하지 않았지만 MySQL 5.6에서는 지원을 하고 있는 tool?이어서 유용하게 쓰고 있습니다.


mysql_config_editor는 무엇일까요?

- mysql_config editor는 mysql 5.6.6 이후 버전에 생성이 된 유틸리티입니다. 제가 5.5.*을 쓰면서 접하지 못했던 이유가 여기에 있습니다.

- 해당 유틸리티는 암호화 문서인 .mylogin.cnf에 합법적으로 login 정보를 저장하는데 의의를 둡니다.

- mysql_config_editor의 역할은 쉽게 login하기 위한 하나의 방법입니다. password를 일일이 기억하지 않고 명령어 한줄로 쉽게 접근할 수 있습니다.


chunge라는 group에 대해서 login 정보를 기입해 놓았다고 하면

shell> /usr/local/mysql/bin/mysql --login-path=chunge 

해당 chunge에 맞는 권한으로 접속이 가능합니다. user와 password를 굳이 입력하고 들어갈 필요가 없는 것이죠 ㅎ

주의해야할 점은 chunge라는 group에 기입한 user와 password, host에 대해 mysql안에서 권한이 부여되어 있어야 합니다.


예를들어서

grant select on chunge.* to 'chunge'@'localhost' identified by 'chunge';

라는 권한을 부여받은 chunge라는 user가 있습니다.

그렇다면 login-path로 chunge라는 group으로 들어 갔을 경우 허용된 권한은 무엇일까요? chunge database의 모든것을 select할 수 있는 권한입니다.

insert, update, delete와 같은 DML은 처리할 수 없습니다. 권한이 없으니까요 ㅎ

정말 mysql_config_editor는 login을 용이하게 도와주지만 거기서 끝입니다. 권한은 mysql 내부에서 결정해야하는 것이죠.

이점을 잘 유의해서 쓰시기 바랍니다. root user에 대한 group이 있다면 root로 접근 가능하지만 그만큼 위험 할 수 있습니다.


그렇다면 제가 위에서 말한 .mylogin.cnf는 무엇일까요?

MySQL Client Program이 서버로 접속 할 때 인증을 도와주는 파일입니다. vi나 cat으로 읽었을 때 암호화된 파일이므로 깨져서 보이게 됩니다.
그렇기 때문에 mysql_config_editor의 print 옵션을 이용하면 제대로 된 정보를 읽을 수 있습니다. 단, password는 *** 과 같이 보이지 않습니다.
이와 같은 파일이 생성 된 이유는 my.cnf에 정보를 입력 할 경우 os계정을 획득 했을 경우 바로 password 및 user가 노출 될 수 있기 때문입니다. 


print 옵션을 통해 보았을 때 .mylogin.cnf는 아래와 같이 그룹형태로 출력이 됩니다.

[client]
user = mydefaultname
password = mydefaultpass

host = 127.0.0.1 [mypath] user = myothername password = myotherpass host = localhost 


한가지 주의할 점은 .mylogin.cnf가 os 계정별로 생성이 되게 됩니다.

이게 무슨소리냐!!?!? 하실 수 있는데요 ㅎ

기본적으로 .mylogin.cnf는 각 계정의 home directory에 생성이 됩니다.

root계정에서 mysql_config_editor를 이용한 login group을 생성했다고 하면 해당 설정이 root의 home directory인 /root/.mysql_config_editor.cnf로 저장이 되는 것이죠.

그래서 만약 일반 계정인 chunge 라는 계정이 root계정에서 생성한 .mysql_config_editor가지고 로그인을 하려고 하면 login이 되지 않습니다.

따라서 chunge 계정에서도 똑같이 login-path를 이용한 로그인을 하고 싶다면 chunge 계정으로 switch user를 하신 다음 mysql_config_editor를 설정해 주어야 합니다.

그래야 home directory인 /home/chunge/에 /home/chunge/.mysql_config_editor.cnf가 생성이 되고 해당 config file을 보고 login을 할 수 있습니다.


다시한번 사람으로 치면 제가 요새 "또 오해영"을 즐겨보는데요. 서현진과 전혜빈이 드라마에선 오해영이라는 동명이인입니다. 이름이 같은거죠.ㅎㅎ

서현진이 서현진의 집을 들어가려 합니다. 서현진은 자신의 집의 비밀번호를 알고 있고 그에 대한 권한이 있기 때문에 자신의 집을 들어 갈 수 있죠.

하지만 전혜빈이 서현진의 집을 들어가려 하면 자신의 집이 아니고 권한 조차 없기 때문에 같은 이름인 오해영이라도 집을 들어 갈 수 없습니다.

하지만 서현진의 집에 대해서 전혜빈이 권한(집 비밀번호)를 부여받은 상태라면? 서현진의 집을 들어갈 수 있겠죠 ㅎ

하나의 집에 대해서 여러명이 각각 권한을 부여받아야 집을 들어갈 수 있듯이 각 os 계정이 mysql Server라는 공통된 daemon에 접근하기 위해선 각자의 권한이 필요합니다.

 

좀 더 쉽게 말하자면 도어락에서 매일매일 번호를 8자리 이상 입력하고 들어가면 시간도 오래걸리고 까먹으면 힘들죠.

하지만 카드키를 지원을 해서 카드를 찍고 들어갈 수 있다면? 편하죠 ㅎ 각각 사람별로 카드키를 발급해서 띡하고 찍고 들어가는 것이 편하듯이 mysql_config_editor는 유저별로 카드키를 발급해주는 겁니다 ㅎ


그렇다면 mysql_config_editor를 어떻게 설정하면 될까요? 이제 Syntax를 보도록 하죠!ㅎ


shell> mysql_config_editor [program_options] [command [command_options]] 

 


program_options는 mysql_config_editor의 일반적인 옵션으로 구성됩니다.

command는 실행할 command를 말합니다.

command_options는 command가 필요로 하는 옵션들을 말합니다.


좀 더 자세히 보도록 하죠. 아래의 글은 

  1. http://dev.mysql.com/doc/refman/5.6/en/mysql-config-editor.html 을 보고 제가 정리한 것입니다.

mysql_config_editor의 command와 command 상세 옵션들입니다.
mysql_config_editor의 command는 크게 set, remove, print, reset, help로 총 5가지로 볼 수 있습니다.

set [options]
login path 파일에 login path를 입력하는 명령어입니다.
이 명령어는 --host, --password, --port, --soket, --user 옵션을 명시해서 입력합니다.
만약 아무런 것도 입력하지 않는다면 빈 그룹으로 입력이 될 것입니다.
set 명령어에는 아래와 같이 세부적으로 command_options가 붙습니다.


 --help, -?
set command에 대한 help 메시지를 보여주고 종료됩니다. 일반적인 help 메시지를 보고 싶으면 mysql_config_editor --help를 이용하면 됩니다.

 --host=host_name, -h host_name
 login path를 위한 호스트 이름입니다.

 --login-path=name, -G name
 login path를 생성합니다. 만약 이 옵션을 명시하지 않는다면 기본 login path 이름은 client입니다.

 --password, -p
 login path를 위해 prompt에 password를 입력하게 합니다. 

다른 유저에게 패스워드가 보이는 것을 방지하기 위해 mysql_config_editor는 다시 물어보지 않습니다.
빈 패스워드를 명시하기 위해서는 password를 입력하는 prompt에서 Enter를 입력하면 되며 login path 파일에는 아래와 같이 나오게 됩니다.

password= 


 --port=port_num, -P port_num
 login path에 입력할 TCP/IP 포트번호를 입력합니다. 이 옵션은 Mysql 5.6.11에 추가되었습니다.


 --socket=file_name, -S file_name
 login path에 입력할 Unix socket 파일 이름을 입력합니다. 이 옵션은 Mysql 5.6.11에 추가되었습니다.


 --user=user_name, -u user_name
 login path에 입력할 user 이름을 입력합니다.


 --warn, -w
 이미 login path에 존재하는데 중복 입력이 시도될 경우 경고메시지를 보여주게 하는 옵션이며, 이 옵션은 기본값으로 활성화 되어 있습니다. 해제하고 싶으면 --skip-warn을 입력하면됩니다.


remove [options]
login path 파일에서 login path를 삭제하거나 옵션을 삭제함으로써 login path를 수정할 수 있습니다.

이 명령어는 --host, --password, --port, --soket, --user 옵션에 따라 각각의 옵션값을 지웁니다. 

만약 아무것도 입력하지 않는다면, login path 전체를 삭제합니다.

예를 들면 아래와 같은데, 첫번째 예제는 --user를 입력하여 user 정보만 삭제하지만 두번째 예제는 user 또한 입력하지 않았기 때문에 login path [mypath]그룹의 모든 정보를 삭제합니다.

 mysql_config_editor remove --login-path=mypath --user

 

 mysql_config_editor remove --login-path=mypath

이 명령어는 아래와 같은 command_options가 존재합니다.
 --help, -?
 remove command에 대한 help 메시지를 보여주고 종료됩니다. 일반적인 help 메시지를 보고 싶으면 mysql_config_editor --help를 이용하면 됩니다.

 --host, -h
 login path에서 호스트 이름 정보를 지웁니다. 이 옵션은 Mysql 5.6.9에서 추가되었습니다.


 --login-path=name, -G name
 삭제하거나 수정할 login path 값입니다. 아무것도 입력하지 않았을 때, 기본 login path이름은 client입니다.


 --password, -p
 login path에서 password를 지웁니다. 이 옵션은 Mysql 5.6.9에서 추가되었습니다.


 --port, -P
 login path에서 TCP/IP포트 번호를 지웁니다. 이 옵션은 5.6.11에서 추가되었습니다.


–socket, -S
 login path에서 Unix socket file 정보를 지웁니다. 이 옵션은 Mysql 5.6.11에서 추가되었습니다.


 --user, -u
 login path에서 user 정보를 지웁니다. Mysql 5.6.9에서 추가되었습니다.


 --warn, -w
 default login path인 client와 --login-path=client를 명시하지 않았을 때, user에게 경고를 합니다. 

기본값으로 활성화 되어있으며 --skip-warn를 이용하면 비활성화 시킬 수 있습니다.

print [options]
login path파일을 암호화 되지 않은 형식으로 보여줍니다. 예외적으로 password들은 *****과 같이 보여줍니다.
login path이름이 없다면 기본적으로 client를 보여줍니다. 만약 --all과 --login-path 옵션을 둘다 입력한다면 --all을 우선시합니다.
print에는 아래와 같은 command_options가 존재합니다.


 --help, -?
print command에 대한 help 메시지를 보여주고 종료됩니다. 일반적인 help 메시지를 보고 싶으면 mysql_config_editor --help를 이용하면 됩니다.

 

--all
 login path 파일안에서 모든 login path 그룹에 대해서 출력합니다.


 --login-path=name, -G name
 login path의 이름을 입력해서 특정 login path만 출력합니다.


reset [options]
login path파일을 빈 파일로 바꿉니다.
이 명령어는 아래와 같은 command_options가 존재합니다.


 --help, -?
 reset command에 대한 help 메시지를 보여주고 종료됩니다. 일반적인 help 메시지를 보고 싶으면 mysql_config_editor --help를 이용하면 됩니다.

 

help
일반적인 help 메시지를 보여주고 종료됩니다. 

mysql_config_editor command --help 


여기까지가 mysql_config_editor에 대한 syntax입니다.

다양한 방법으로 mysql_config_editor를 이용할 수 있는데요.

저같은 경우에는 shell script에서 많이 사용합니다. shell script 파일 내에서 패스워드를 입력시켜놓으면 아무래도 보안상 취약할 수 밖에 없기 때문입니다.

그럴때 login-path를 이용하여 shell script 내부에 password를 노출 시키지 않고 db에 접근해서 작업을 할 수 있는 것이죠.

제가 5.5에서 쓸때에는 password가 적힌 파일을 두고 chmod로 권한을 최소화 한 다음에 이용하는 방식으로 해도 찜찜 했었습니다.

하지만 이럴때 login-path는 정말 유용하다고 생각이 됩니다. 다른 분들의 mysql_config_editor의 사용에 도움이 되고자 적어본 글이었습니다.


이상! 끝!ㅎ

'MySQL > MySQL Admin' 카테고리의 다른 글

pt-online-schema-change(pt-OSC)의 chunk_size_limit 함정  (0) 2019.12.24
mysql parameter innodb_locks_unsafe_for_binlog  (0) 2015.12.09
Mysql isolation Level 설정  (0) 2015.12.09
Mysql prompt 변경하기!  (0) 2015.12.04
Transaction이란?  (0) 2015.12.04