Так, приложениям нашего веб-сервера необходимо подключаться к базе данных, а некоторые другие приложения имеют сценарии запуска, которые выполняются во время загрузки.
Как лучше всего хранить имя/пароль для этих приложений, с точки зрения
приветствуются решения как для windows, так и для linux!
Лучший способ обеспечить Ваш пароль состоит в том, чтобы прекратить использовать тот. Используйте связь, которой доверяют: Как к: соединитесь с SQL-сервером Используя Windows Authentication в ASP.NET 2.0. Тогда у Вас нет ничего, чтобы скрыться - издают Ваш web.config и источник к миру, они все еще can' t поражают Вашу базу данных.
Если это won' t работа для Вас, используйте встроенный система шифрования конфигурации в ASP.NET.
PostgreSQL предлагает хорошее решение для этого вида ситуации в их документации. По существу Вы используете ssh, чтобы соединить порт на Вашей машине к порту сервера PostgreSQL на отдаленной машине. У этого есть три этапа идентификации:
Это уменьшает безопасность до того, обеспечены ли Ваши учетные записи пользователей, и Ваша ssh конфигурация нормальная, и у Вас нет потребности пароля, сохраненного нигде.
Отредактируйте : Я должен добавить, что это будет работать с любой базой данных, которая слушает порт TCP/IP. Это просто, оказывается, описано в PostgreSQL. И Вы захотите, чтобы iptables (или эквивалент от Linux) сделал ограничения порта. Посмотрите это.
Я соглашаюсь с lomaxx: если кто-то уже находится на сервере или имеет широкий доступ к нему (как системный администратор), игра в значительной степени закончена. Таким образом, идея состояла бы в том, чтобы использовать сервер, Вы полагаете, что это безопасно до степени, которой Вы хотите, чтобы он был. Конкретно:
Кроме того, переменные окружения, кажется, популярный выбор для хранения этих типов верительных грамот, потому что это означает что доступ к источнику только (например, ставя под угрозу dev коробку) doesn' t показывают его непосредственно, и также это может быть приятно локализовано для каждого сервера (dev, тест, и т.д.).
обычный текст? Если они находятся на вашем сервере, я надеюсь, что сервер достаточно безопасен, чтобы не допустить несанкционированного доступа. Если люди могут получить доступ к вашим конфигурационным файлам на сервере, что-то пошло не так гораздо раньше.
В большинстве случаев я полагаю, что достаточно запутать пароль в файле открытого текста (например, с base64). Вы не можете полностью защитить сохраненный пароль от решительного системного администратора с доступом корня, таким образом, there' s не действительно любая потребность попробовать. Простая путаница, однако, защищает от случайного раскрытия пароля серфингисту плеча.
Более сложная альтернатива должна настроить выделенный безопасный сервер пароля что также:
В зависимости от сетевых используемых протоколов это может не защитить от системного администратора жулика с tcpdump. И это, вероятно, won' t защищают от решительного системного администратора с отладчиком, также. В том пункте могло бы быть пора посмотреть на что-то как билеты Kerberos.
разъяснение: с точки зрения безопасности, удобства обслуживания (например, если логин должен измениться, смогу ли я найти его позже и т.д.)
@lomax: возможно, я не хочу, чтобы все, кто имеет доступ к физическому серверу (например, сисадмины), видели пароль.
Спасибо!
Вы можете заложить ключ симметричного шифрования в двоичный файл, а при запуске двоичного файла считать зашифрованное имя пользователя/пароль из файла на диске.
Однако на самом деле это не более чем обфускация, поскольку ваш код, скорее всего, будет храниться где-то в репозитории исходных текстов.
Я бы предположил, что вам лучше контролировать доступ к вашим серверам как физически, так и по сети с помощью брандмауэра и частного сетевого пузыря, а пароли хранить в открытом виде (или в кодировке base-64) на диске с правами, закрытыми для пользователя, запускающего ваше веб-приложение.
Вы также можете заблокировать сервер базы данных, чтобы он принимал соединения только с машин вашего веб-приложения по IP.
В конечном счете, ваша проблема заключается в том, что ключ (пара имя пользователя/пароль вашей БД) должен быть доступен для программного, неуправляемого использования вашими веб-приложениями.