2011-01-31 37 views
1

我們有一個構建可以將特定環境中的所有屬性文件都嵌入到存檔(war文件)中的war文件打包。建設生產發佈 - 數據庫連接憑證

我們現在即將生產。我擔心代碼庫需要公開生產數據庫密碼,儘管生產構建配置文件可能會產生負面影響,但這種風險不大可能存在。

選項我想到了否定這種風險是不存儲在SVN生產細節和:

  1. 具有用於連接到數據庫管理員優先系統的性能,或

  2. 讓容器管理數據庫連接而不是c3p0,這樣他們可以自己管理這個配置。

您有什麼建議嗎?

回答

2

您一定要而不是將生產DB用戶名和密碼放入您的源代碼管理系統。您的應用程序應該使用由生產環境中的管理員控制/限制的JNDI獲取其數據庫連接(例如DataSource)。

例如,如果您的應用程序部署到Tomcat,您在Tomcat中/ conf/context.xml文件

<Resource name="jdbc/myDB" 
       auth="Container" 
       type="javax.sql.DataSource" 
       maxActive="20" 
       maxIdle="10" 
       maxWait="3000" 
       username="myusername" 
       password="mypassword" 
       driverClassName="com.mysql.jdbc.Driver" 
       url="jdbc:mysql://myhost:3306/myschema" 
       defaultAutoCommit="false"/> 

下..並且連接從java:/comp/env/jdbc/myDB獲得,而您的應用程序不必提供用戶名或密碼。 tomcat安裝由管理員在prod服務器上進行保護,因此任何沒有管理員訪問權限的用戶都無法在prod服務器上使用它。

0

在生產中,我傾向於不在屬性文件中存儲憑據的方法。相反,我更喜歡應用程序服務器使用jndi來提供憑據。

如果您使用Apache Tomcat,請參閱它們的實例jndi reference

0

我已經嘗試在歸檔和歸檔之外都具有屬性,並且將它們放在歸檔之外是更容易管理這類問題的。

需要注意以下幾點:

  1. 若要在可能的範圍內,你可以有屬性的默認值,因此,如果未找到屬性,它會使用默認值(例如,使用「本地主機」作爲默認的數據庫連接URL)。
  2. 您仍然可以在代碼旁邊的源代碼管理中保留非生產環境的屬性文件。

使用這兩個策略,開發人員可以負責管理非生產屬性文件,這也是生產管理員的示例。它還將大多數屬性集中在源代碼管理中,提供了一些保持集中的好處,同時仍然足夠分離屬性。

編輯:請注意,JNDI是一個選項,但在架構上它與外部存儲屬性文件相同 - 您仍然需要注意版本這些不會讓它們在不同的環境中鬆動。

+0

讓外面的屬性不是一個選項。不要問爲什麼:)看起來像jndi是要走的路。 – JamesC 2011-01-31 16:50:59