Пароль для хешированной базы данных [Hibernate]

Из-за требований безопасности мне нужно хранить пароль базы данных как md5-хэш в моем hibernate.cfg.xml, но, насколько я знаю, Hibernate не поддерживает хешированные пароли. Я использую Hibernate 5.1.0.

Мой hibernate.cfg.xml выглядит так:

    <?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD//EN"
"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
    <property name="hibernate.connection.driver_class">org.h2.Driver </property>
    <property name="hibernate.connection.url">jdbc:h2:tcp://localhost/~/test</property>
    <property name="hibernate.connection.username">sa</property>
    <property name="hibernate.connection.password"></property>
      <property name="show_sql">true</property>
  <property name="hibernate.c3p0.min_size">5</property>
  <property name="hibernate.c3p0.max_size">20</property>
  <property name="hibernate.c3p0.timeout">300</property>
  <property name="hibernate.c3p0.max_statements">50</property>
    <property name="dialect">org.hibernate.dialect.MySQLDialect</property>
    <property name="hibernate.hbm2ddl.auto">update</property>

</session-factory>
</hibernate-configuration>

Вот как я создаю sessionFactory:

import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;

public class HibernateUtility {
    private static final SessionFactory sessionFactory = buildSessionFactory();

    private static SessionFactory buildSessionFactory() {
        try {
            // Create the SessionFactory from hibernate.cfg.xml
            return new Configuration()
                    .configure()
                    .buildSessionFactory().;
        } catch (Throwable ex) {
            System.err.println("Initial SessionFactory creation failed." + ex);
            throw new ExceptionInInitializerError(ex);
        }
    }

    public static SessionFactory getSessionFactory() {
        return sessionFactory;
    }
}

Есть ли способ использовать хешированный пароль базы данных для спящего режима?

2 ответа

Решение

Пароль, указанный в hibernate.connection.password используется hibernate для подключения к базе данных, и, следовательно, ему нужен реальный пароль вместо хешированного пароля.

Хешированные пароли хранятся только в том случае, если вам необходимо подтвердить личность пользователя, поскольку после хеширования любого текста он становится необратимым.

Это односторонний процесс:вы можете получить хешированный текст из вашего пароля, но вы не можете получить пароль обратно из сгенерированного хешированного текста.

Если вы храните хешированный пароль в hibernate.connection.password тогда ваш спящий режим не сможет подключиться к базе данных, потому что нет способа получить пароль из хеша MD5. Так что это невозможно.

см. также: Принципиальная разница между алгоритмами хеширования и шифрования.

Тем не менее, вы можете зашифровать пароль в hibernate.cfg.xml увидеть этот вопрос

Вы бы лучше перенесли пароль, то есть полностью удалили его из hibernate.cfg.xml. Затем вы можете передать его через системное свойство, например, добавив следующее в команду запуска вашего сервера: -Dhibernate.connection.password= пароль.

Еще лучший подход состоит в том, чтобы определить источник данных JNDI на вашем сервере приложений и затем получить hibernate, чтобы получить ссылку на это. Все учетные данные БД затем удаляются из конфигурации приложения, и вы можете затем развернуть свое приложение в различных средах без изменения конфигурации (при условии, что имя источника данных JNDI остается согласованным).

Увидеть:

https://docs.jboss.org/hibernate/orm/3.3/reference/en/html/session-configuration.html

Другие вопросы по тегам