2009-09-17 74 views
17

您使用什麼策略避免在版本控制中存儲密碼?如何避免在版本控制中存儲密碼?

目前,我有開發/測試/生產的密碼保存在三個不同的文件和部署在適當的文件被使用。所有這些都致力於版本控制,但我並不太滿意,因爲並非所有開發人員都需要知道這些密碼(尤其是外包的密碼,只有在他們的項目持續時才能訪問,這可能只有一個月)。

在數據庫中存儲的密碼是不是一個很好的選擇:

  • 我Spring上下文(Java應用程序)的初始化過程中最需要的數據,我不想建的腳手架,用於連接到單個數據庫,然後連接到其餘數據庫並初始化其餘應用程序
  • 某些密碼僅與部署相關;密碼訪問不同的服務器,密鑰庫等;這些都是在啓動後的東西應用程序無法加載,因爲它沒有在所有

我想從開發商機移動部署配置專用電腦從版本控制和簽出的代碼加載運行構建/部署腳本,但我不確定什麼是最好的方式來做到這一點。

我還需要說,我不希望最終的安全:我只是想避免每個開發者的盤上的密碼,並使它太容易了。

所以我要求你的經驗/最佳實踐。你怎麼做呢?

回答

8

環境特定的配置屬性我傾向於把在,比方說,一個屬性文件不在源代碼控制,而不是構建過程的一部分。設置新環境時,部分設置是創建包含數據庫地址,憑證和名稱,相關遠程主機名稱等屬性文件。

在Spring使用PropertyPlaceholderConfigurer加載屬性文件。 Spring只需要找到它,通常意味着將它放在應用程序服務器下的適當目錄中。

或者,您使用wrapper運行應用程序服務器和JVM啓動選項包括添加這些屬性文件到classpath所以Spring可以找到它們。

6

我見過的兩種方法是:

  • 移動密碼爲開發人員不必訪問源代碼控制的另一棵樹。
  • 請勿將任何密碼放入源代碼管理中,並且每次部署完成後,專用構建管理員都需要輸入密碼。這是在一個銀行裏,有一個全職人員在構建流程/合併/發佈。
+1

保持在另一個分支上的密碼似乎是要走的路。像git這樣的分佈式SCM使得這非常簡單。 – hgmnz 2009-09-17 01:58:39

3

這並不適用於所有情況,但這是使用NT AUTHORITY \ NETWORK SERVICE作爲您的服務身份的光榮之處。如果您使用此身份,則無需維護它的密碼 - 您可以使用計算機的AD憑據以DOMAINNAME \ MACHINENAME $的形式進行受保護的網絡和數據庫訪問。

當然,還有一些關鍵的事情需要注意 - 其中最重要的是沒有兩個共享安全邊界的應用程序在同一臺服務器上這樣託管。

0

將密碼置於o/s用戶環境變量中。

只有該用戶或root可以讀取該值,與文件相同,但沒有機會將其簽入源代碼管理。

0

而不是不存儲它們,你可以將它們存儲在加密的形式。所以你不必擔心通過IM或EMail發送證書文件的麻煩,一旦新開發人員開始啓動......你只需要告訴他們項目特定的主密碼,以便他們可以加密證書。

+0

與此相關的一個問題以及其他一些建議是,我認爲密鑰仍將存儲在應用程序代碼中。你如何建議解密密碼?如果手動輸入主關鍵字,它可以工作,但這只是第二好的選擇。最好不要將密碼存儲在版本控制中,甚至是加密的。但是,擁有主密鑰可能是第二好的選擇,只要憑證以只允許帳戶需要訪問的方式完成(例如,如果不需要更新或刪除,則只需要SELECT,例如) – adpro 2017-10-03 12:06:13