使用hibernate时,为了设置数据库配置,我们需要将数据库用户名和密码存储在hibernate的配置文件中。这样做安全吗?如果有人通过读取此文件获得数据库凭据,那么我的数据库信息就不安全了。
这种情况的最佳做法是什么?
答案 0 :(得分:0)
即使您将数据库连接属性存储在xml
或properties 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}}