Пароль для хешированной базы данных [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