MySQL 데이터베이스에 DB와 DB사용자를 추가(또는 삭제)하고 권한을 부여하며, 암호를 변경하는 도구를 소개합니다.
시스템에 Perl DBI 모듈이 설치되어 있다면 MySQL과 함께 설치되는 mysql_setpermission 이란 도구를 사용하면 이러한 작업이 가능하겠습니다만, 저 처럼 일 만들기 좋아하면서 반복작업은 죽기보다 싫어하는 분이라면 아래 도구들을 사용해보시기 바랍니다.
#===================================================================#
BIN=/usr/local/mysql/bin
ADMINNAME=mysql
#===================================================================#
각 파일 상단에 존재하는 위와 같은 "BIN"과 "ADMINNAME" 설정부분은 다음과 같은 기준으로 지정하시면 됩니다.
* BIN : MySQL 실행파일(mysql, mysqladmin 등)들이 위치해 있는 경로
* ADMINNAME : MySQL 운영자권한이 있는 DB User(root, mysql 등)
mysql.create, mysql.delete, mysql.passwd, mysql.pass 파일에 실행권한을 부여한 후 /usr/local/bin 경로에 넣어두고 사용하시면 편리할 것입니다.
아무것도 입력하지 않고 명령어만을 실행하면 간단한 사용법이 출력됩니다.
===================================================================
$ mysql.create
USAGE : mysql.create [DB/USER] [PASSWORD]
===================================================================
본 도구에서는 기본적으로 DB명과 DB사용자명을 동일한 것으로 보며, 그렇기에 DB와 DB사용자가 동시에 생성 및 삭제되도록 구성되어 있습니다.
예를들어 abcd라는 사용자에게 abcd라는 DB와 1234라는 암호를 부여하고 싶다면 다음과 같이 하시면 됩니다.
===================================================================
$ mysql.create abcd 1234
MySQL Admin Password : ******
$
===================================================================
*************************************
DB와 DB User를 추가하는 도구
*************************************
USAGE : mysql.create [DB/USER] [PASSWORD]
$ cat /usr/local/bin/mysql.create
#!/bin/sh
#===================================================================#
BIN=/usr/local/mysql/bin
ADMINNAME=mysql
#===================================================================#
DB=${1}
USER=${1}
PASS=${2}
#===================================================================#
if [ "x${DB}" = "x" -o "x${PASS}" = "x" ]
then
BASENAME=`basename $0`
echo
echo USAGE : ${BASENAME} [DB/USER] [PASSWORD]
echo
exit
fi
#===================================================================#
echo -n "MySQL Admin Password : "
stty -echo; read ADMINPASS; stty echo; echo
if [ "x${ADMINPASS}" = "x" ]
then
echo "Cancel..."
exit
fi
#===================================================================#
${BIN}/mysql mysql -u ${ADMINNAME} -p${ADMINPASS} -e \
"INSERT INTO user VALUES(
'localhost', '${USER}', PASSWORD('${PASS}'),
'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N'
)"
${BIN}/mysql mysql -u ${ADMINNAME} -p${ADMINPASS} -e \
"INSERT INTO db VALUES(
'localhost', '${DB}', '${USER}',
'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y'
)"
${BIN}/mysqladmin -u ${ADMINNAME} -p${ADMINPASS} create ${DB}
${BIN}/mysqladmin -u ${ADMINNAME} -p${ADMINPASS} reload
#===================================================================#
*************************************
DB와 DB User를 삭제하는 도구
*************************************
USAGE : mysql.delete [DB/USER]
$ cat /usr/local/bin/mysql.delete
#!/bin/sh
#===================================================================#
BIN=/usr/local/mysql/bin
ADMINNAME=mysql
#===================================================================#
DB=${1}
USER=${1}
#===================================================================#
if [ "x${DB}" = "x" ]
then
BASENAME=`basename $0`
echo
echo USAGE : ${BASENAME} [DB/USER]
echo
exit
fi
#===================================================================#
echo -n "MySQL Admin Password : "
stty -echo; read ADMINPASS; stty echo; echo
if [ "x${ADMINPASS}" = "x" ]
then
echo "Cancel..."
exit
fi
#===================================================================#
${BIN}/mysql mysql -u ${ADMINNAME} -p${ADMINPASS} -e \
"DELETE FROM user WHERE User='${USER}'"
${BIN}/mysql mysql -u ${ADMINNAME} -p${ADMINPASS} -e \
"DELETE FROM db WHERE Db='${DB}'"
${BIN}/mysqladmin -u ${ADMINNAME} -p${ADMINPASS} drop ${DB}
${BIN}/mysqladmin -u ${ADMINNAME} -p${ADMINPASS} reload
#===================================================================#
*************************************
DB User 암호 변경 도구(운영자용)
*************************************
USAGE : mysql.passwd [USER] [NEW-PASSWORD]
$ cat /usr/local/bin/mysql.passwd
#!/bin/sh
#===================================================================#
BIN=/usr/local/mysql/bin
ADMINNAME=mysql
#===================================================================#
USER=${1}
NEWPASS=${2}
#===================================================================#
if [ "x${USER}" = "x" -o "x${NEWPASS}" = "x" ]
then
BASENAME=`basename $0`
echo
echo USAGE : ${BASENAME} [USER] [NEW-PASSWORD]
echo
exit
fi
#===================================================================#
echo -n "MySQL Admin Password : "
stty -echo; read ADMINPASS; stty echo; echo
if [ "x${ADMINPASS}" = "x" ]
then
echo "Cancel..."
exit
fi
#===================================================================#
${BIN}/mysql mysql -u ${ADMINNAME} -p${ADMINPASS} -e \
"UPDATE user SET Password=PASSWORD('${NEWPASS}')
WHERE User='${USER}'"
${BIN}/mysqladmin -u ${ADMINNAME} -p${ADMINPASS} reload
#===================================================================#
*************************************
DB User 암호 변경 도구(사용자용)
*************************************
USAGE : mysql.pass [OLD-PASSWORD] [NEW-PASSWORD]
$ cat /usr/local/bin/mysql.pass
#!/bin/sh
#===================================================================#
BIN=/usr/local/mysql/bin
#===================================================================#
USER=`whoami`
OLDPASS=${1}
NEWPASS=${2}
#===================================================================#
if [ "x${OLDPASS}" = "x" -o "x${NEWPASS}" = "x" ]
then
BASENAME=`basename $0`
echo
echo USAGE : ${BASENAME} [OLD-PASSWORD] [NEW-PASSWORD]
echo
exit
fi
#===================================================================#
${BIN}/mysqladmin -u ${USER} -p${OLDPASS} password ${NEWPASS}
#===================================================================#
*출처 :way.co.kr