JPA可以使用加密密码进行数据库连接

时间:2014-10-10 16:00:41

标签: spring hibernate spring-security spring-data-jpa jpa-2.1

我有如下的Spring JPA配置

<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close" >
    <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>

<bean id="emf" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean" >
    <property name="dataSource" ref="dataSource" />
    <property name="jpaVendorAdapter" ref="vendorAdaptor" />         
    <property name="packagesToScan" value="pk.training.model"/>
    <property name="jpaProperties">
        <props>
            ...
            <prop key="hibernate.show_sql">true</prop>              
        </props>        
    </property>
</bean> 

我有属性文件,其中我有密码,如

jdbc.password=abc123

当我的应用程序运行时,sp​​ring上下文加载并连接到数据库。精细。现在我想问一下,假设我以加密形式提供密码,比如

jdbc.password=$53ytg#@!

现在JPA如何连接到数据库? JPA是否有任何属性可以自行处理加密密码,或者我必须自己做一些事情?

感谢。

1 个答案:

答案 0 :(得分:1)

你必须自己做这件事。安全方面,它并没有增加太多。攻击者可以

  1. 在Spring中设置断点,等待创建bean并从字段中读取密码
  2. 查看您的代码,找出存储密钥的位置以解密数据库密码,提取并使用您的代码对其进行解密
  3. 由于大多数数据库驱动程序默认不对您的应用程序和数据库之间交换的数据进行加密,因此您的密码(以及所有数据)将通过网络以纯文本形式发送(除非数据库位于同一服务器上)作为你的申请)。
  4. 因此,在大多数情况下,要做的事情是将数据库用户和密码放在服务器磁盘上的文件中,并确保只有经过授权的人才能访问此文件(加上您的应用程序可以读取它)。加密密码只会添加obscurity, no real security