2013-12-09 108 views
4

需要創建簡單的mysql備份腳本。以bash腳本存儲MySQL密碼

但是 - 如何存儲MySQL用戶的加密傳遞呢?

我想在任何其他文件中避免以純文本類型存儲密碼。

正如我MySQL手冊中找到:

MySQL的使用自己的算法

大二加密存儲在用戶表中的密碼沒有辦法只是得到hash並將其設置爲變量?

我的意思是:

DBHASH="cGFzc3dvcmQ=" 
DBPASS=`echo $DBHASH | openssl enc -base64 -d` 

有來解答任何正確的方式? 感謝您的提示。

回答

7

如果腳本包含明文密碼或不包含明文密碼(如果包含進入MySQL的可重複例程)(即自動解密),則攻擊者只會執行相同的操作。如果你可以傳遞散列/解密密碼並進行MySQL比較,那麼它就會是可重複的(並且散列函數無論如何都會作爲密碼)。

所以,簡單的答案是:你不能這樣做。你有一些選項...

  • 建立一個正確chmoded(600)〜/ .my.cnf用的憑據。
  • 創建一個只允許從本地主機登錄的'限制',無密碼備份帳戶。
  • 在這兩種情況下,只允許從本地主機/備份主機進行備份登錄。
  • 如果你在Debian上,你可以使用的debian-SYS-MAINT帳戶(其中有一個的my.cnf已經設置了憑證)
  • 限制MySQL賬戶,包括在腳本中的密碼純文本,但只允許給定的用戶/ root讀腳本(如果你有root用戶,你可以接管mysql)。
  • 從外部文件(具有正確的chmod-600)讀取/'源'配置變量(用戶名/密碼)...但基本上是在執行my.cnf

記住一個「備份帳戶」不需要寫權限等等

+0

哦,當然 - 這是不正是我想要的,但是 - 似乎沒有認識到沒有其他辦法...謝謝。 – setevoy

2

afaict,沒有辦法做你想找的東西。無論您存儲散列還是原始密碼,無論如何,如果有人能夠讀取您的腳本,您將會存儲非常明智的信息,這些信息可能會被惡意使用。

您可能更喜歡的是改爲建立無法登錄的用戶帳戶,並設置mysql以便用戶具有對腳本的確切權限。同時也要讓這個用戶是唯一擁有對腳本的exec訪問權限的用戶。