是否可以在hibernate.cfg.xml中存储数据库凭据

时间:2015-03-01 16:45:16

标签: java database hibernate security

使用hibernate时,为了设置数据库配置,我们需要将数据库用户名和密码存储在hibernate的配置文件中。这样做安全吗?如果有人通过读取此文件获得数据库凭据,那么我的数据库信息就不安全了。

这种情况的最佳做法是什么?

2 个答案:

答案 0 :(得分:0)

即使您将数据库连接属性存储在xmlproperties file中,最终用户也可以获取访问权限并读取凭据。

但如果是,有人可以访问您的deployment setup/war/server etc,只有那些人可以阅读。

但最好在属性文件中包含凭据,并将其用作xml文件中的占位符。

this可能会对您有所帮助。

答案 1 :(得分:0)

这不是一个好主意,因为每个有权访问hibernate.cfg.xml文件或pesistnce.xml文件的人都可以读取用户名,密码和数据库主机名。但这不是最严重的问题:关键是您将代码绑定到数据库。这是错误的,因为您必须解耦代码和数据库。客户必须具有在所需的任何环境(例如开发,测试,集成,生产)中自由部署最终应用程序的自由,并且每个环境都有自己的数据库。您无法编辑每个发行版的代码。

您应该在hibernate.cfg.xml文件和persistence.xml中声明数据源的名称。

您可以通过以下方式在休眠的hibernate.cfg.xml文件中声明数据源:

<hibernate-configuration>
    <session-factory>
        <!-- properties -->
        <property name="connection.datasource">jdbc/DatasourceName</property>
        <mapping class="MyEntity" />
    </session-factory>
</hibernate-configuration>

您可以通过以下方式在persistence.xml文件中声明数据源名称:

<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.1"
    xmlns="http://xmlns.jcp.org/xml/ns/persistence"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd">
    <persistence-unit name="MyPU">
        <jta-data-source>jdbc/DataSourceName</jta-data-source>
        <class>MyEntity</class>
    </persistence-unit>
</persistence>

完成在配置文件中声明数据源的操作后,您必须在Application Server中部署数据源。此过程取决于您使用的是哪个Application Server(例如Glassfish,Tomcat等)和您使用的DB(例如MySQL,Postgres等)。例如,如果您使用的是Glassfish和MySQL,则可以遵循以下{{ 3}}