
Я ищу способ сохранить пароль базы данных на рабочей машине, чтобы мое собственное приложение могло его прочитать (чтобы подключиться к базе данных), но пользователь без прав администратора не мог его прочитать. Администратор должен иметь возможность изменить пароль, желательно автоматически.
Я имею в виду что-то вродеФайл .pgpass для PostgreSQLв среде Linux. Возможно ли это также в среде Windows?
Я думаю, что файл паролей можно сделать доступным только для администраторов. Но может ли программа, которая является исполняемой для пользователя, также получить доступ к этому файлу? Далее, возможно ли с помощью групповых политик распространить такой файл по сети?
Другие решения, которые я рассматриваю (вероятно, потребуют больше усилий):
- Зашифруйте файл паролей. Только приложение и администраторы имеют действительные ключи для расшифровки и изменения/чтения файла.
- Получите пароль из сетевого ресурса, предположительно также зашифрованного.
решение1
В ответ на ваш вопрос о доступе только администратора:
Windows запускает службы с разрешения пользователя (если только вы специально не запускаете их как администратор или другой пользователь), поэтому, если у пользователя нет доступа к файлу, то и у программы его не будет.
В ответ на вопрос о групповой политике:
Да, вы можете использовать групповую политику для распространения файлов через настройки групповой политики. (См.:https://www.adamfowlerit.com/2016/07/group-policy-preferences-replace-existing-file/)
решение2
Если кому интересно: я придумал следующее решение.
Пароль хранится в зашифрованном виде в XML-файле («контейнер паролей»). Контейнер можно открыть и редактировать с помощью пароля администратора. Шифрование симметрично. Контейнер размещается на сетевом ресурсе, просто в сетевом каталоге.
Приложению сообщается местоположение контейнера с паролем, и оно может открыть контейнер с паролем, поскольку пароль администратора хранится в коде.
Я знаю, что это решение не на 100% безопасно, так как пароли не должны храниться в коде. Однако для этих требований (пароль базы данных должен быть скрыт от пользователя, пароль базы данных должен быть администрируемым) решение достаточно хорошее.