天天看點

mysql權限腳本_Shell腳本之Mysql授權

近段時間,由于項目較多,開發人員頻繁要求資料庫賬号授權。本來想着把測試環境的資料庫權限直接給他們自己管理就好了,可上司不同意。那好吧,隻能給他們開權限呗。時間長了,感覺這樣的工作實在枯燥、乏味,但又不得不幹。于是就想着,寫個腳本吧,免得每次還得登陸資料庫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