我正在研究将由学校使用的应用程序。每所学校将建立自己的数据库。每个学校都会为应用程序提供自己的“设置”文件。设置文件将包含创建设置文件的特定学校的数据库URL。这样一来,使用该应用程序的学生如果想连接到其他数据库,就只能加载其他设置文件。
我的问题是,如何保护用于连接数据库的用户名和密码?因此,只有应用程序具有对数据库的读写访问权限。应用程序仅具有该特定学校的读写权限吗?
如果您需要更多信息,请告诉我。
谢谢
看一下Jasypt,它是一个Java库,允许开发人员以最小的努力将基本的加密功能添加到他/她的项目中,而无需对密码如何工作有深入的了解。
如果您使用Spring,则可以将您定义db.properties为:
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),因此他们将无法通过查看属性文件来获得连接字符串。
username
如果您不使用Spring,这是Jasypt指南,可以“手动”实现相同的功能