MySQL密碼加密認證的簡單指令碼

jeanron100發表於2018-04-04

MySQL登入的時候,如果明文指定了密碼,在登入成功之後就會丟擲下面的警告。

[root@dev01 /]# mysql -uroot -pxxxx

mysql: [Warning] Using a password on the command line interface can be insecure.

Welcome to the MySQL monitor. Commands end with ; or \g.

Your MySQL connection id is 2837

不要小看這個錯誤,有些業務驗證是不允許出現Warning的,所以可能有些大廠還需要自己定製一下這個錯誤的邏輯。

當然如果不需要知道密碼,能不能換個方式來做呢,其實也行,在5.6中開始有了loginpath,和Oracle中的錢包的功能差不多,其實就是一種認證,做了授權,你不需要知道這些資訊,loginpath就是一道橋樑為你做了認證。

如果你是5.5的版本,沒了loginpath,有沒有可行的方案來滿足需求呢。

有的同學可能這個時候才開始問,需求是什麼?

我們設想一下,命令列的方式中,輸入明文密碼,那還要密碼幹嘛,乾脆我輸入密碼的時候你別看,但是history命令裡面有啊。

所以這也算是一個風險點的入口,如果因為一些意外的情況登入,那麼這種情況就很尷尬了。這是需求一。

還有一種場景,如果我們有大量的MySQL環境,每個環境的DBA賬戶密碼是統一的,但是密碼很複雜。我們不能輸入明文,那麼就輸入密碼格式,那就意味著互動和手動輸入,手動輸入簡直了,你會發現這種操作真是原始,高階一點,用下keypass或者keepass等,這個是依賴於本地的環境配置。所以需求二的特點就是手工維護密碼囉嗦,手工輸入密碼太原始。

那我們寫指令碼,但是指令碼里面的密碼還是可見的,呼叫的明文密碼問題解決了,但是內容中的密碼還是可讀的。

所以這種情況下,一個很自然的方法就是加密。

其中一種是對密碼加密,比如我們得到一個密碼加密後的串,在需要呼叫的時候做一下解密,得到真實的密碼。這個過程是在指令碼里的邏輯來實現,所以我們得到明文密碼的機率要低一些。

另外一類就是對檔案加密,比如對整個檔案加密,加密之後檔案就沒法讀了。所以加密後的密碼又被加密了。對檔案加密有shell的方式還有python等語言會

如果要呼叫指令碼的時候,其實就是先解密檔案,然後呼叫解密邏輯,得到真正的密碼,然後開啟訪問的請求。

比如我得到了一個加密後的密碼串。呼叫的解密邏輯是decrypt_passwd,當然這個是可讀還可逆的,我們其實可以再加入一些複雜的因子來干擾。

指令碼的初步內容如下:

sec_password='RHB6WUF1d1c5TTEzabadfo='

dec_passwd=''

sql_block=''

function decrypt_passwd

{

tmp_passwd=$1

dec_passwd=`echo $tmp_passwd|base64 -d`

}

decrypt_passwd $sec_password

instance_ip=$1

instance_port=$2

port=$1

if [ ! -n "$port" ]; then

echo '############################################'

echo 'Please input correct MySQL Port and try again.'

echo '############################################'

ps -ef|grep mysqld|grep -v grep |grep -v mysqld_safe

exit

fi

/usr/local/mysql/bin/mysql -udba_admin -p$dec_passwd -h127.0.0.1 -P$1

這樣一個簡單的檔案,使用gzexe來加密即可,就是我們初步預期的效果了。

這個檔案就類似一個二進位制檔案,我們複製到任何伺服器端,指定入口,就可以方便的訪問了。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/23718752/viewspace-2152622/,如需轉載,請註明出處,否則將追究法律責任。

相關文章