Шифрование пароля БД в Application.conf для PLAY 2.0 / ANRORM
-
11-12-2019 - |
Вопрос
Я не хочу ставить незашифрованные пароли в файле конфигурации приложения.
Этот вопрос: Шифрование пароля БД в Applications.conf имеет отличныйРешение для проблемы, но это работает только для игры 1.
Есть ли кто-нибудь решение, которое работает для игры 2.0?Я использую Anorm в Scala версию PLAY 2.0.2.
Решение 3
Благодаря обсуждению с Raffaele и после моего собственного исследования кода, похоже, что PLAY 2.0 не позволяет шифровать пароли DB.
Если я что-то пропустил, пожалуйста, дайте мне знать.
.
// 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), как предложено в