1. 程式人生 > >一次簡單實現登入多系統的需求小程式

一次簡單實現登入多系統的需求小程式

【環境介紹】

  系統環境: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,  涉及比較多的主機資訊時,寫些小程式對工作的效率也是非常有效提高的;

關於資產安全資訊一定評估好,對於資料庫而言資料安全是必不可少的重要環節。