一次簡單實現登入多系統的需求小程式
【環境介紹】
系統環境:Linux + shell
【背景描述】
需求:由於資料庫維護較多同時涉及較多的系統型別,對於不熟悉系統的同事來說,及時登入一些資料庫顯然是需要時間,登入雖然簡單,先查到資訊再登入系統,顯然會降低效率。為了解決這個問題,同事建議是否能寫個指令碼,能比較方便的登入系統。
對於這個問題,考慮的問題如下:
1, 從一臺主機登入多臺主機,相當於跳轉伺服器,網路上一定要互通;
2, 根據不同業務的系統劃分列表資訊;
3, 涉及到資產列表資訊,伺服器的安全性一定要高。
結果:之前申請了一臺專門監控的伺服器,用於提取週報資訊。剛好能滿足這個條件。
【針對性設計結構】
1, 顯示資訊的方式,根據業務系統不同顯示資訊;---根據比多的業務域分類
2, 登入伺服器的方式選擇,多個節點登入;---能選擇性的多個節點登入,例如RAC
3, 使用哪個使用者登入。---考慮到也有單機主機,決定用Oracle使用者登入
經過對上面的問題考慮,決定用Oracle使用者根據不同系統可多個節點選擇登入。最終結果如下:
主要資訊列表檔案:
主要功能輸出資訊:
主要實現功能的部分指令碼如下:
#!/bin/sh
######################################################################
# login3.sh
# This script is conn db hosts instance
# Author CZT
######################################################################
function connectdb() 》》》主要實現輸出主機資訊的函式
{
title=`cat ${list_dest}|head -1`
result=`cat ${list_dest}|grep -i ${Dbname}`
echo "+---------------+---------------+---------------+---------------+---------------+-----+"
printf "|"
printf "%-15s|" $title
printf "\n"
echo "+---------------+---------------+---------------+---------------+---------------+-----+"
printf "|"
printf "%-15s|" $result
printf "\n"
echo "+---------------+---------------+---------------+---------------+---------------+-----+" v_instancenum=4
read -p "Enter host instancenum:" v_instance
while [ ! $v_instance ]
do
read -p "Enter host instancenum:" v_instance
done
if [[ $v_instance =~ "^[1-2]*$" ]]
then
v_instancenum=$[$v_instancenum+$v_instance]
dbip=`cat ${list_dest}|grep -i ${Dbname}|awk '{print $"'$v_instancenum'"}'`
echo "Note:You are current try to connect "$Dbname$v_instance
ssh $dbip
else
echo "Note:You are current try to connect "$Dbname$v_instance" does not exist,Please enter the right instancenum!!!"
fi
}
list_dest='/home/oracle/tmp/liebiao.txt' 》》》建立不同業務域系統的列表陣列
LISTS="$(cat /home/oracle/tmp/xitong.txt) QUIT" 》》》建立不同系統的列表陣列
echo "+-------------------------------+This is the system list+---------------------------------------+"
select Dest in $LISTS;do 》》》建立不同業務域系統的列表陣列
case $Dest in
"CRM") 》》》CRM業務域系統選項資訊
DB="$(cat /home/oracle/tmp/CRMDB.TXT) QUIT"
echo "+--------------------------------+This is the $Dest db list+-------------------------------+"
select Dbname in $DB;do
case $Dbname in
"YYDB") 》》》營業資料庫系統資訊
connectdb $Dbname; 》》》呼叫第一步涉及的connectdb函式輸出資訊
;;
"GGDB")
connectdb $Dbname;
;;
"DZQD")
connectdb $Dbname;
;;
"QUIT")
echo "Note:You are quit of the option!"
break;
;;
esac
done;
;;
"QUIT") 》》》選擇退出時,退出
echo "Ignorant"
break;
;;
esac
done;
【問題思考】
1, 總體實現的思路邏輯是比較簡單,但是功能確實比較實用,特別適用於不熟悉系統的同事,指令碼同時也實現其他庫,比如測試庫,開發庫進行擴充套件;
2, 對於網路這段時間出現的問題由於許可權限制,無法解決,有些資料庫還是需要手動登入;
3, 對於輸出資訊的顯示也是非常重要,參考MySQL的輸出資訊格式,花了不少時間進行調整,使用者體驗也是非常重要的一個關注點;
4, 對於使用者密碼安全性問題,儘量使用加密的方法進行對密碼加密。
【總結】:
1, 根據實際情況,根據需求一定要仔細羅列一下邏輯思路,必會事半功倍;
2, 涉及比較多的主機資訊時,寫些小程式對工作的效率也是非常有效提高的;
關於資產安全資訊一定評估好,對於資料庫而言資料安全是必不可少的重要環節。