我們有一個構建可以將特定環境中的所有屬性文件都嵌入到存檔(war文件)中的war文件打包。建設生產發佈 - 數據庫連接憑證
我們現在即將生產。我擔心代碼庫需要公開生產數據庫密碼,儘管生產構建配置文件可能會產生負面影響,但這種風險不大可能存在。
選項我想到了否定這種風險是不存儲在SVN生產細節和:
具有用於連接到數據庫管理員優先系統的性能,或
讓容器管理數據庫連接而不是c3p0,這樣他們可以自己管理這個配置。
您有什麼建議嗎?
我們有一個構建可以將特定環境中的所有屬性文件都嵌入到存檔(war文件)中的war文件打包。建設生產發佈 - 數據庫連接憑證
我們現在即將生產。我擔心代碼庫需要公開生產數據庫密碼,儘管生產構建配置文件可能會產生負面影響,但這種風險不大可能存在。
選項我想到了否定這種風險是不存儲在SVN生產細節和:
具有用於連接到數據庫管理員優先系統的性能,或
讓容器管理數據庫連接而不是c3p0,這樣他們可以自己管理這個配置。
您有什麼建議嗎?
您一定要而不是將生產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服務器上使用它。
在生產中,我傾向於不在屬性文件中存儲憑據的方法。相反,我更喜歡應用程序服務器使用jndi
來提供憑據。
如果您使用Apache Tomcat,請參閱它們的實例jndi reference。
我已經嘗試在歸檔和歸檔之外都具有屬性,並且將它們放在歸檔之外是更容易管理這類問題的。
需要注意以下幾點:
使用這兩個策略,開發人員可以負責管理非生產屬性文件,這也是生產管理員的示例。它還將大多數屬性集中在源代碼管理中,提供了一些保持集中的好處,同時仍然足夠分離屬性。
編輯:請注意,JNDI是一個選項,但在架構上它與外部存儲屬性文件相同 - 您仍然需要注意版本這些不會讓它們在不同的環境中鬆動。
讓外面的屬性不是一個選項。不要問爲什麼:)看起來像jndi是要走的路。 – JamesC 2011-01-31 16:50:59