【问题标题】:Can JPA use encrypted password for database connectionJPA可以使用加密密码进行数据库连接吗
【发布时间】: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 是否有任何属性可以自己处理加密密码,或者我必须自己做一些事情?

谢谢。

【问题讨论】:

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


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 2023-03-04
    • 1970-01-01
    • 1970-01-01
    • 2015-10-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-03
    • 1970-01-01
    相关资源
    最近更新 更多