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

Posted

技术标签:

【中文标题】JPA可以使用加密密码进行数据库连接吗【英文标题】:Can JPA use encrypted password for database connection 【发布时间】:2014-12-05 20:44:54 【问题描述】:

我的 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 是否有任何属性可以自己处理加密密码,或者我必须自己做一些事情?

谢谢。

【问题讨论】:

How to use encrypted password in apache BasicDataSource? 的可能重复项 您可以加密密码,但您将在哪里存储解密密钥? 【参考方案1】:

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

    在Spring中设置断点,等到bean创建完成,从字段中读取密码 查看您的代码,找出您存储用于解密数据库密码的密钥的位置,提取并使用您的代码进行解密 由于默认情况下大多数 DB 驱动程序不会加密您的应用程序和数据库之间交换的数据,因此您的密码(和所有数据)以纯文本形式通过网络发送(除非数据库与您的服务器位于同一台服务器上)申请)。

所以在大多数情况下,要做的事情是将数据库用户和密码放在服务器磁盘上的一个文件中,并确保只有授权的人才能访问这个文件(加上你的应用程序可以读取它)。加密密码只会添加obscurity, no real security。

【讨论】:

以上是关于JPA可以使用加密密码进行数据库连接吗的主要内容,如果未能解决你的问题,请参考以下文章

数据库连接用户名和密码加密

winform程序如何加密配置文件

将jdbc连接明文密码加密方案

PHP如何对用户密码进行加密

使用druid 数据池对连接密码加密

36. ClustrixDB 使用ClustrixDB加密连接