【问题标题】:application connect to database应用程序连接到数据库
【发布时间】:2011-12-04 23:37:40
【问题描述】:

我正在开发一个供学校使用的应用程序。每个学校都会建立自己的数据库。并且每所学校都会为申请提供自己的“设置”文件。设置文件将包含创建设置文件的特定学校的数据库 URL。这样一来,使用该应用程序的学生如果想连接到不同的数据库,就可以加载不同的设置文件。

我的问题是,我如何保护用于连接数据库的用户名和密码?因此,只有应用程序具有对数据库的读写访问权限。并且该应用程序仅具有对该特定学校的读写权限?

如果您需要更多信息,请告诉我。

谢谢

【问题讨论】:

  • 所以你的应用是webapp还是桌面应用?您想在应用程序中加密密码吗?设置文件只包含 DB URL 但没有用户/密码信息,对吗?顺便说一句,您可以为特定数据库创建数据库用户,所有数据库都在同一个数据库服务器内
  • 桌面,我想保护应用程序用于对数据库进行身份验证的用户名和密码,设置文件仅包含 db url。应用程序用户名和密码用于授予应用程序在数据库中的读/写权限。

标签: java mysql database


【解决方案1】:

看看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 来实现相同的“手动”

【讨论】:

  • 我不确定 spring 是什么,但这严格来说是一个桌面应用程序。这是否意味着我必须做你提到的手动版本?
  • @prolink007,它是桌面应用程序、Web 应用程序还是守护程序并不重要。如果你愿意,你仍然可以使用 Spring。看看doc,一开始可能会让人不知所措,因为 Spring 做了很多很多很酷的事情。但是,如果这不是您目前想要学习的东西,使用 Jasypt 各种密码加密器(例如 BasicPasswordEncryptor、StrongPasswordEncryptor 等)“手动”加密凭据也是一个非常可靠的选择
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-09-30
  • 2018-09-03
  • 2011-07-27
  • 2011-07-28
相关资源
最近更新 更多