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

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

Как лучше всего сохранить имя / пароль для этих приложений с точки зрения

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

оценены как решения для Windows, так и для Linux!

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
8
0
4 911
7
Перейти к ответу Данный вопрос помечен как решенный

Ответы 7

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

Следование этой стратегии приведет к упущению возможности для создания глубокоэшелонированной защиты.

AJ. 25.05.2010 13:34

пояснение: с точки зрения безопасности, ремонтопригодности (например, если необходимо изменить логин, могу ли я найти его позже и т. д.)

@lomax: возможно, я не хочу, чтобы все, у кого есть доступ к физическому серверу (например, системные администраторы), видели пароль.

Спасибо!

Вы можете записать симметричный ключ шифрования в свой двоичный файл и заставить этот двоичный файл читать зашифрованное имя пользователя / пароль из файла на диске при его запуске.

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

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

Вы также можете заблокировать сервер базы данных, чтобы он принимал соединения только с компьютеров с веб-приложениями по IP.

В конечном итоге ваша проблема заключается в том, что ключ (ваша пара имени пользователя и пароля БД) должен быть доступен для программного автоматического использования вашими веб-приложениями.

Я согласен с lomaxx: если кто-то уже находится на сервере или имеет широкий доступ к нему (например, системный администратор), игра в значительной степени окончена. Таким образом, идея состоит в том, чтобы использовать сервер, которому вы доверяете, что он безопасен в той степени, в которой вы этого хотите. Конкретно:

  • Вам нужно доверять системным администраторам
  • Вам нужно доверять кому-либо еще, кто запускает код на том же сервере (вот почему виртуальный хостинг для меня не подходит)

Помимо этого, переменные среды кажутся популярным выбором для хранения этих типов учетных данных, потому что это означает, что доступ только к источнику (например, путем компрометации блока разработчика) не раскрывает его напрямую, а также его можно хорошо локализовать для каждый сервер (dev, test и т. д.).

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

AJ. 25.05.2010 13:36

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

Более сложная альтернатива - настроить выделенный безопасный сервер паролей, который либо:

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

В зависимости от используемых сетевых протоколов это может не защитить от злоумышленника системного администратора с помощью tcpdump. И это, вероятно, также не защитит от решительного системного администратора с отладчиком. В этот момент, возможно, пришло время взглянуть на что-то вроде билетов Kerberos.

Ответ принят как подходящий

Лучший способ защитить свой пароль - отказаться от него. Используйте надежное соединение: Как: подключиться к SQL Server с помощью проверки подлинности Windows в ASP.NET 2.0. Тогда вам нечего скрывать - опубликуйте свой web.config и исходный код в мире, они все равно не смогут попасть в вашу базу данных.

Если это не сработает для вас, используйте встроенный система шифрования конфигурации в ASP.NET.

PostgreSQL предлагает хорошее решение для такого рода ситуаций в своей документации. По сути, вы используете ssh для соединения порта вашего компьютера с портом сервера PostgreSQL на удаленном компьютере. У этого есть три этапа аутентификации:

  1. Ограничьте доступ к локальному порту, например, разрешите подключаться к нему только определенному пользователю.
  2. Настройте соединение без пароля с хостом PostgreSQL с ssh в качестве конкретного пользователя.
  3. Разрешить пользователю ssh подключаться как для локального доступа к PostgreSQL без пароля.

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

Редактировать: Я должен добавить, что это будет работать с любой базой данных, которая прослушивает порт TCP / IP. Просто так случилось, что это описано в PostgreSQL. И вы захотите, чтобы iptables (или эквивалент в Linux) выполнял ограничения портов. См. это.

Другие вопросы по теме