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

标签 java database hibernate security

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

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

最佳答案

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

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

您可以通过以下方式在 hibernate 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>

在配置文件中声明完数据源后,您必须在应用程序服务器中部署数据源。此过程取决于您使用的应用程序服务器(例如 Glassfish、Tomcat 等)和您使用的数据库(例如 MySQL、Postgres 等)。例如,如果您使用 Glassfish 和 MySQL,则可以按照此 guide 进行操作。

关于java - 是否可以将数据库凭据存储在 hibernate.cfg.xml 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28796188/

相关文章:

java - 输入流根据内容由不同的对象处理

java - 几个sql请求检索数据(hibernate)

mysql - mysql 用户可以限制每个选择查询的最大行数吗?

java - Hibernate EntityManager 合并不更新空白更改

java - 存在子查询的 JPA 规范使 SQL Server 语法失败

java - 无法将 VisualVM 探查器与 Maven Jetty 插件一起使用

java - 它到达 if 语句并停止工作,我做错了什么(java 新手)

sql - 专门用于排序的列的命名约定

java - 如何通过 Java 更快地执行 Oracle 更新/插入操作?

java - 仅在子类上为列添加唯一约束