我正在研究将由学校使用的应用程序。每所学校都将建立自己的数据库。每个学校都会为应用程序提供自己的“设置”文件。设置文件将包含制作设置文件的特定学校的数据库URL。这样,使用该应用程序的学生只需加载不同的设置文件就可以连接到不同的数据库。
我的问题是,如何保护用于连接数据库的用户名和密码?因此,只有应用程序才能对数据库进行读写访问。该应用程序只对该特定学校进行读写访问?
如果您需要更多信息,请告诉我们。
由于
答案 0 :(得分:2)
看一下Jasypt,这是一个java库,它允许开发人员以最小的努力为他/她的项目添加基本的加密功能,而无需深入了解密码学的工作原理。 / p>
如果您使用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
执行相同操作),因此他们无法通过查看属性文件来获取连接字符串。
如果你没有使用Spring,这里有一个Jasypt guide来实现“手动”