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
当我的应用程序运行时,spring 上下文会加载并连接到数据库。美好的。现在我想问一下,假设我以加密形式提供密码,比如
jdbc.password=$53ytg#@!
现在 JPA 如何连接到数据库? JPA 是否有任何属性可以自己处理加密密码,或者我必须自己做一些事情?
谢谢。
【问题讨论】:
How to use encrypted password in apache BasicDataSource? 的可能重复项 您可以加密密码,但您将在哪里存储解密密钥? 【参考方案1】:你必须自己做。安全方面,虽然它并没有增加太多。攻击者可以
-
在Spring中设置断点,等到bean创建完成,从字段中读取密码
查看您的代码,找出您存储用于解密数据库密码的密钥的位置,提取并使用您的代码进行解密
由于默认情况下大多数 DB 驱动程序不会加密您的应用程序和数据库之间交换的数据,因此您的密码(和所有数据)以纯文本形式通过网络发送(除非数据库与您的服务器位于同一台服务器上)申请)。
所以在大多数情况下,要做的事情是将数据库用户和密码放在服务器磁盘上的一个文件中,并确保只有授权的人才能访问这个文件(加上你的应用程序可以读取它)。加密密码只会添加obscurity, no real security。
【讨论】:
以上是关于JPA可以使用加密密码进行数据库连接吗的主要内容,如果未能解决你的问题,请参考以下文章