Способы шифрования паролей к базам данных в конфигурационном файле на примере Node.js

Однажды меня спросили:

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

Привожу пару мыслей на этот счет.

Настройка прав доступа к файлу средствами Linux

Необходимо выставить правильные настройки прав доступа к файлу на сервере так, чтобы его не мог читать любой пользователь системы и отдельный пользователь для одной конкретной задачи, т.к. контекст подразумевает не пароли пользователей сервиса, а хранения пароля к базе данных (БД).

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

Плюсы:
+ В конфигурационный файл удобно вносить изменения.

Минусы:
— У пользователя root в любом случае есть все права на конфигурационный файл.

Vault by HashiCorp

На отдельном сервере лежит запечатанный контейнер к которому можно получить доступ, предварительно распечатав его и авторизовавшись при помощи ключа.

Плюсы:
+- Так таковых плюсов не увидел, т.к. этот продукт решает другую задачу — передачу секретов по незащищённым каналам в запечатанном виде, хранение всех паролей в одном месте и гибкое разделение прав доступа к паролям через различные способы авторизации.

Минусы:
— Если файл зашифрован, но рядом лежит ключ для расшифровки, то пароль будет все равно извлечен.

Обфускация, напр. через NPM-пакет javascript-obfuscator

Тот же JS, но в неудобочитаемом виде.

Плюсы:
+- Не является шифровальщиком, но позволяет скрыть какие-то алгоритмы и логику работы программы.

Минусы:
— В обфусцированном файле при детальном просмотре пароли видны в явном виде.

Инициализация приложения из другого источника

Сервер, который не смотрит во внешнюю сеть, подключается по SSH и выполняет операции по запуску на боевом сервере и после запуска удаляет не значимые файлы.

Плюсы:
+ Пароль не хранится на боевом сервере.

Минусы:
— Нужен какой-то скрипт, который будет производить запуск/перезапуск приложения и подчищать «хвосты».

Преобразование JavaScript в байткод, напр. через NPM-пакет bytenode

Байт-код (англ. bytecode) — стандартное промежуточное представление, в которое может быть переведена компьютерная программа автоматическими средствами. По сравнению с исходным кодом, удобным для создания и чтения человеком, байт-код — это компактное представление программы, уже прошедшей синтаксический и семантический анализ. В нём в явном виде закодированы типы, области видимости и другие конструкции. С технической точки зрения байт-код представляет собой машинно-независимый код низкого уровня, генерируемый транслятором из исходного кода.

Плюсы:
+ Нет ключа дешифровки.

Минусы:
— При изменении кода в файле, нужно каждый раз проделывать операцию по преобразованию файла в другой вид или придумать какое-то решение или какой-то скрипт который будет это делать автоматически.