Вопрос

Я не хочу ставить незашифрованные пароли в файле конфигурации приложения.

Этот вопрос: Шифрование пароля БД в Applications.conf имеет отличныйРешение для проблемы, но это работает только для игры 1.

Есть ли кто-нибудь решение, которое работает для игры 2.0?Я использую Anorm в Scala версию PLAY 2.0.2.

Это было полезно?

Решение 3

Благодаря обсуждению с Raffaele и после моего собственного исследования кода, похоже, что PLAY 2.0 не позволяет шифровать пароли DB.

Если я что-то пропустил, пожалуйста, дайте мне знать.

EDIT : можно обойти проблему, используя пользовательский драйвер базы данных следующим образом:

// Just redirect everything to the delegate
class DelegatingDriver(delegate: Driver) extends Driver
{
  def connect(url: String, info: Properties) = delegate.connect(url, info)
  def acceptsURL(url: String) = delegate.acceptsURL(url)
  def getPropertyInfo(url: String, info: Properties) = delegate.getPropertyInfo(url, info)
  def getMajorVersion = delegate.getMajorVersion
  def getMinorVersion = delegate.getMinorVersion
  def jdbcCompliant() = delegate.jdbcCompliant()
}

// Replace password in properties with the decrypted one
class MyDecryptingDriver extends DelegatingDriver(Class.forName("<my.original.Driver>").newInstance().asInstanceOf[Driver])
{
  override def connect(url: String, info: Properties)= {
    // copy Properties
    val overriddenProperties= clone(info)   
    // override password property with the decrypted value
    Option(info.getProperty("password")).foreach(value => overriddenProperties.setProperty("password", decryptPassword(value)))
    super.connect(url, overriddenProperties)
  }

  def clone(orig: Properties)= {
    val result= new Properties()
    orig.propertyNames().map(_.asInstanceOf[String]).foreach(pName => result.setProperty(pName, orig.getProperty(pName)))
    result
  }

  def decryptPassword(encrypted: String)= ...
}
.

Затем вы заменяете Application.conf / db ..driver by my.com.mydecryping водитель.Не идеально, но работает для меня ...

Другие советы

Все усилия бессмыслены. Когда мы поставили Hashed Password в базе данных, состоит в том, что люди могут сохранить пароли в их мозге, а их мозги не читаются . Это называется асимметричным шифрованием em>.

То, о чем вы говоряте, возможна только с помощью симметричного шифрования : программа имеет ключ во время выполнения и использует эту клавишу для расшифровки пароля БД. Но в чем в том, чтобы хранить пароль БД, зашифрованным ключом, и все еще имея этот ключ, публично доступна? (Это верно как для Java источников, так и для составленных классов). Цепочка так же сильна, как ее слабая ссылка.

Когда машина должна подключиться к БД, ему нужен пароль: мы храним этот пароль в простом тексте, поскольку программа должна использовать ее, как есть, и ни один человек не требуется . Все, что мы можем сделать, чтобы обеспечить безопасность - ограничить доступ к этому простому текстовому файлу, в конечном итоге защищая его паролем, хранящимся только в уме админа (кстати, более вероятно, что администратор сохранит все его пароли в базе данных, возможно, с помощью основной пароль). Обратите внимание, что все не меняются, если вы используете упомянутый Play Plugin.

Единственная вещь, которая приходит на мой разум - это приложение для воспроизведения, которое подключается только к БД, когда администратор вводит пароль DB (но на самом деле это только для мышления)

Я знаю, что немного поздно, но не новее обсуждений об этой проблеме.Я хочу поделиться фактическим решением (Play v.2.5.x), как предложено в

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top