我正在写一份申请书,供学校使用。每所学校都会建立自己的在线数据库。而每所学校都会提供自己的“设置”文件来申请。设置文件将包含创建设置文件的特定学校的数据库url。这样,使用应用程序的学生只要想连接到不同的数据库,就可以加载不同的设置文件。
我的问题是,如何保护用于连接数据库的用户名和密码?因此,只有应用程序对数据库具有读写权限。而且申请书只有那个学校的读写权限?
如果你需要更多的信息,请告诉我。
谢谢

最佳答案

看看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执行相同的操作),因此他们无法从查看属性文件中派生连接字符串。
如果您不使用spring,这里有一个Jasypt guide来实现相同的“手动”

10-05 18:30
查看更多