2011-10-11 176 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

相关问题