Скрытие пароля базы данных с использованием спецификации кодека в datasource.groovy не работает

Я скрываю пароль базы данных в datasource.groovy, делая

dataSource {
pooled = true
driverClassName = "com.mysql.jdbc.Driver"
username = "root"
password = "q59YgJCdHw3dshwlsa=="
passwordEncryptionCodec = DESCodec
dbname="mydbname"
}

последовали за artilce: http://jira.grails.org/browse/GRAILS-3620

Я запускаю класс groovy codec отдельно, чтобы получить зашифрованную строку следующим образом: groovy grails-app/utils/DESCodec.groovy mypassword_string_text.

Но после размещения класса DESCodec в пакете Utility в grails, когда я пытаюсь запустить сервер, он не запускается, а напрямую выключается. Он запускается, когда я прямо устанавливаю правильный пароль и комментирую кодек и зашифрованную строку. Я предполагаю, что он не находит класс кодека/что-то еще, отсутствующее в конфигурации, например, для определения класса кодека требуются кавычки или любое изменение пути, или я должен изменить алгоритм, кстати, класс DESCodec является последним классом кодека в ссылка.

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

Ответ 1

Я думаю, что лучший способ сделать это - экстернализировать конфигурацию, специфичную для среды (особенно пароли, а также URL-адреса, адреса электронной почты и т.д.), а затем защитить файл конфигурации с соответствующими разрешениями в файловой системе целевой машины.

В Config.groovy(например):

grails.config.locations = [
    "file:/etc/${appName}/conf/db.properties"
]

и в файле конфигурации:

dataSource.username = "root"
dataSource.password = "secret"

Я обычно делаю это для конфигурации производства, но сохраняю конфигурацию dev/test в Config.groovy для удобства. При запуске в dev/test вы просто получаете предупреждение при запуске, если он не может найти указанный файл конфигурации. Если он найдет его, то он переопределит то, что в Config.groovy

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