Пароль шифрования для c3p0 ComboPooledDataSource

В настоящее время у меня есть конфигурация server.xml, в которой есть следующее:

<Resource auth="Container"
    description="DB Connection"
    driverClass="oracle.jdbc.driver.OracleDriver"
    maxPoolSize="40"
    minPoolSize="2"
    aquireIncrement="1"
    name="jdbc/FOOBAR"
    user="foo"
    password="bar"
    factory="org.apache.naming.factory.BeanFactory"
    type="com.mchange.v2.c3p0.ComboPooledDataSource"
    jdbcUrl="path:to:db:port:db" />

У меня есть требование больше не позволять имени пользователя/паролю быть в открытом виде в файле server.xml по очевидным причинам.

Я немного почитал в Интернете и наткнулся на Как защитить пароли базы данных Tomcat для Java Шифровать имя пользователя и пароль для JNDI в Tomcat Server.xml и многих других страницах; однако я немного застрял.

Сначала я посмотрел на расширение BasicDataSourceFactory, но, похоже, этого не может произойти из-за того, что я использую c3p0 CombinedPooledDataSource. Затем я попытался создать оболочку источника данных c3p0, внедрив PooledDataSource, Serializable и Referenceable, но это тоже не сработало.

Я читал, что могу перенести аутентификацию на сервер, сделав auth="Container" => auth="Application". Однако я не уверен, как реализовать остальные части с помощью Hibernate.

Любая помощь будет здорово.


person ist_lion    schedule 13.02.2013    source источник


Ответы (1)


Таким образом, это не будет решением с высокой степенью безопасности.

Но простой способ обойти это — использовать тот факт, что свойство «пароль» c3p0 — это просто настраиваемое свойство c3p0, которое можно установить самыми разными способами. Итак, вы можете создать файл c3p0.properties и/или файл c3p0-config.xml и установить там пароль. В качестве альтернативы вы можете убедиться, что системное свойство c3p0.password установлено при запуске JVM.

Если у вас будет несколько источников данных с разными паролями, вам нужно будет использовать именованную функцию конфигурации c3p0, что означает файл c3p0-config.xml.

Файлы конфигурации c3p0 (как c3p0.properties, так и c3p0-config.xml) могут быть застряли на верхнем уровне jar-файла в эффективном пути к классам вашего приложения. (С tomcat вы должны быть осторожны с различиями между ClassLoader, специфичным для веб-приложения, и более широко используемыми местоположениями.) Таким образом, вы можете встроить свой пароль в сжатый файл jar, а не в обычный текстовый файл. Очевидно, это небезопасно: открытый текст можно просто «разархивировать». Но это предотвратило бы случайный выбор пароля и тому подобное.

См. http://www.mchange.com/projects/c3p0/#configuration_files.

Удачи!

person Steve Waldman    schedule 13.02.2013