我正在研究一个将由学校使用的应用程序。每所学校都将建立他们的数据库。每所学校都会向应用程序提供他们自己的“设置”文件。设置文件将包含创建设置文件的特定学校的数据库网址。这是为了让使用该应用程序的学生如果想连接到不同的数据库,可以加载不同的设置文件。应用程序连接到数据库
我的问题是,我如何保护用于连接到数据库的用户名和密码?所以,只有该应用程序具有读取和写入数据库的权限。并且该应用程序仅对该特定学校有读写权限?
如果您需要更多信息,请让我知道。
感谢
我正在研究一个将由学校使用的应用程序。每所学校都将建立他们的数据库。每所学校都会向应用程序提供他们自己的“设置”文件。设置文件将包含创建设置文件的特定学校的数据库网址。这是为了让使用该应用程序的学生如果想连接到不同的数据库,可以加载不同的设置文件。应用程序连接到数据库
我的问题是,我如何保护用于连接到数据库的用户名和密码?所以,只有该应用程序具有读取和写入数据库的权限。并且该应用程序仅对该特定学校有读写权限?
如果您需要更多信息,请让我知道。
感谢
看看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才达到相同的“手动”
我不确定春天是什么,但这完全是桌面应用程序。这是否意味着我将不得不做你提到的手动版本? – prolink007
@ 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
让你的应用程序是Web应用程序或桌面应用程序?你想加密应用程序中的密码?设置文件只包含数据库URL但没有用户/密码信息,对吗?顺便说一句,你可以创建一个特定的数据库用户数据库,所有的数据库都在同一个数据库服务器 – Tommy
桌面,我想保护应用程序用来验证数据库的用户名和密码,设置文件只包含数据库网址。应用程序用户名和密码用于为应用程序提供数据库中的读/写权限。 – prolink007