2011-10-11 168 views
1

我正在研究一個將由學校使用的應用程序。每所學校都將建立他們的數據庫。每所學校都會嚮應用程序提供他們自己的「設置」文件。設置文件將包含創建設置文件的特定學校的數據庫網址。這是爲了讓使用該應用程序的學生如果想連接到不同的數據庫,可以加載不同的設置文件。應用程序連接到數據庫

我的問題是,我如何保護用於連接到數據庫的用戶名和密碼?所以,只有該應用程序具有讀取和寫入數據庫的權限。並且該應用程序僅對該特定學校有讀寫權限?

如果您需要更多信息,請讓我知道。

感謝

+0

讓你的應用程序是Web應用程序或桌面應用程序?你想加密應用程序中的密碼?設置文件只包含數據庫URL但沒有用戶/密碼信息,對嗎?順便說一句,你可以創建一個特定的數據庫用戶數據庫,所有的數據庫都在同一個數據庫服務器 – Tommy

+0

桌面,我想保護應用程序用來驗證數據庫的用戶名和密碼,設置文件只包含數據庫網址。應用程序用戶名和密碼用於爲應用程序提供數據庫中的讀/寫權限。 – prolink007

回答

2

看看Jasypt,它是一個Java庫,允許開發者基本的加密功能添加到他/她以最少的投入項目,並沒有對密碼學是如何工作的,需要有很深的造詣。

如果你使用Spring,你可以定義你的db.properties爲:

jdbc.driver=com.mysql.jdbc.Driver 
jdbc.url=jdbc:mysql://localhost/yourdb 
jdbc.username=userName 
jdbc.password=ENC(A6L729KukPEx7Ps8didIUWb01fdBRh7d) 

與Jasypt和Spring的配置它:

<bean class="org.jasypt.spring.properties.EncryptablePropertyPlaceholderConfigurer"> 
    <constructor-arg> 
    <bean class="org.jasypt.encryption.pbe.StandardPBEStringEncryptor"> 
     <property name="config"> 
     <bean class="org.jasypt.encryption.pbe.config.EnvironmentStringPBEConfig"> 
      <property name="algorithm" value="PBEWithMD5AndDES" /> 
      <property name="passwordEnvName" value="APP_ENCRYPTION_PASSWORD" /> 
     </bean> 
     </property> 
    </bean> 
    </constructor-arg> 
    <property name="locations"> 
    <list> 
     <value>classpath:/META-INF/props/db/db.properties</value> 
    </list> 
    </property> 
</bean> 

<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"> 
    <property name="driverClassName" value="${jdbc.driverClassName}"/> 
    <property name="url" value="${jdbc.url}"/> 
    <property name="username" value="${jdbc.username}"/> 
    <property name="password" value="${jdbc.password}"/> 
</bean> 

這將隱藏實際的密碼(你可以做username)與學生相同,所以他們將無法從查看屬性文件中派生連接字符串。

如果你使用的不是春天,這裏是一個Jasypt guide才達到相同的「手動」

+0

我不確定春天是什麼,但這完全是桌面應用程序。這是否意味着我將不得不做你提到的手動版本? – prolink007

+0

@ prolink007,它是否是桌面應用程序,Web應用程序或守護程序並不重要。如果你願意,你仍然可以使用Spring。看看[doc](http://static.springsource.org/spring/docs/3.1.x/spring-framework-reference/htmlsingle/spring-framework-reference.html),起初它可能會令人難以置信,因爲Spring做了很多很酷的事情。但是,如果您目前不想要學習的東西,使用Jasypt各種密碼加密器(例如BasicPasswordEncryptor,StrongPasswordEncryptor等)「手動」加密憑據也是一個非常穩固的選項 – tolitius

相關問題