近段時間,由于項目較多,開發人員頻繁要求資料庫賬号授權。本來想着把測試環境的資料庫權限直接給他們自己管理就好了,可上司不同意。那好吧,隻能給他們開權限呗。時間長了,感覺這樣的工作實在枯燥、乏味,但又不得不幹。于是就想着,寫個腳本吧,免得每次還得登陸資料庫grant授權,希望能對工作效率有所提高。
下面是我寫的一個簡單的shell腳本,
#!/bin/sh
#
# Mysql資料庫使用者權限管理
#
. /etc/rc.d/init.d/functions
#定義全局變量mysql
MYSQLCMD="/usr/local/mysql/bin/mysql"
#聲明添加使用者授權函數
function add_auth()
{
read -p 'Port: ' add_auth[0]
read -p 'DB [db.* | db.t1]: ' add_auth[1]
read -p 'Permisions [SELECT,UPDATE...]: ' add_auth[2]
read -p "Authorized to host's IP: " add_auth[3]
read -p 'Username: ' add_auth[4]
read -s -p 'Password: ' add_auth[5]#隐藏密碼回顯
#定義局部參數變量
PORT=${add_auth[0]} #資料庫端口
DB=${add_auth[1]}#需要授權的資料庫或表
LIMITS=${add_auth[2]}#權限類型
IP=${add_auth[3]}#授權遠端主機IP登陸
USERNAME=${add_auth[4]}#連接配接使用者名
PASSWD=${add_auth[5]}#密碼
SOCKT="/tmp/mysql${PORT}.sock"#資料庫連接配接SOCK檔案
#授權
$MYSQLCMD -S $SOCKT -e "grant $LIMITS on ${DB} to \"${USERNAME}\"@\"${IP}\" identified by \"$PASSWD\";" && ret1=0
#重新整理授權表
$MYSQLCMD -S $SOCKT -e "FLUSH PRIVILEGES;" && ret2=0
if [ $ret1 = 0 ] && [ $ret2 = 0 ]
then
echo -e "\n\033[32;49;1m Successfully Authorized for user $USER. \033[39;49;0m"
fi
}
#聲明撤銷使用者權限函數drop_user()
function drop_user()
{
read -p 'Port: ' revoke_auth[0]
read -p 'Need to revoke username: ' revoke_auth[1]
read -p 'Revoke Host: ' revoke_auth[2]
PORT=${revoke_auth[0]}
USER=${revoke_auth[1]}
HOST=${revoke_auth[2]}
SOCKT="/tmp/mysql${PORT}.sock"
$MYSQLCMD -S $SOCKT -e "drop user ${USER}@\"${HOST}\";" && ret1=0
$MYSQLCMD -S $SOCKT -e "FLUSH PRIVILEGES;" && ret2=0
if [ $ret1 = 0 ] && [ $ret2 = 0 ]
then
echo -e "\n\033[32;49;1m Successfully to drop user $USER. \033[39;49;0m"
fi
}
#讀取使用者輸入,判斷添加使用者授權OR撤銷使用者
read -p 'Add or revoke the Authorization? [ add | drop ] ' n
case "$n" in
'add')
add_auth
;;
'drop')
drop_user
;;
*)
echo "Select: add or drop"
esac