Лучшая практика хранения пароля базы данных
Я разрабатываю пользовательское серверное приложение, которое будет обращаться к базе данных. Мне нужно решить, где я буду хранить учетные данные (и адресовать) этому серверу.
Общим решением является размещение учетных данных в файле конфигурации. Однако я не хочу, чтобы взломанный сервер имел в виду, что у хакера есть доступ к БД (который размещен на отдельном сервере).
Я мог хранить учетные данные в среде, но это просто безопасность через неясность. Г-н Злой может просто посмотреть в окружающую среду, чтобы найти его.
Кто-то предложил шифрование. Однако, если я храню ключ в исполняемом файле, быстро декомпилирую (мы используем Java), и я все еще обречен.
Я также хочу избежать необходимости вводить парафраз каждый раз, когда я запускаю сервер.
Любые предложения? Я чувствую, что мне не хватает чего-то простого.
Спасибо
Ответы
Ответ 1
Я не думаю, что вам не хватает чего-то простого. Либо сервер, о котором идет речь, может подключиться к базе данных без вашей помощи, и в этом случае он должен иметь учетные данные; или он не может подключиться без вашего обеспечения. Вы можете предпринять различные шаги, например, перечисленные вами, чтобы сделать его более трудным для уязвимого сервера, чтобы показать учетные данные в базе данных, но в конце дня, если он должен иметь эти учетные данные и предоставить их на сервер БД для соединения, они должны быть сохранены на нем где-то — или, по крайней мере, он должен будет иметь некоторые средства для их получения, и в этом смысле он будет взломан.
Лучше всего сосредоточиться на том, чтобы как можно быстрее сосредоточиться на интрузиях (скомпрометированных серверах), сохраняя хорошие офф-лайн резервные копии в оффлайне для наихудшего случая, в первую очередь ставя множество препятствий на пути вторжения, и др.
Ответ 2
Я делюсь, как я это решил.
- API сборки, чтобы запрашивать данные аутентификации из чужого домена.
- Используйте открытый ключ и закрытый ключ для чтения деталей.
Но, честно говоря, единственное, что это делало, - это над сложными простыми вещами. После этого я создал несколько пользователей в базе данных с разными привилегиями.
Как
-
guest
может только SELECT
-
mod
может только CREATE
, INSERT
, UPDATE
, DELETE
и т.д. и переключил пользователя, когда появлялись аутентифицированные пользователи.
Благодаря сочетанию пользователей и сеанса, я смог избежать угроз до сих пор. Но, конечно, уязвимость кода должна быть тщательно протестирована.
Ответ 3
Заблокируйте его. Не допускайте, чтобы г-н Злой стал корнем. Я знаю, легко?
Напишите защищенное приложение и заблокируйте сервер приложений. Соблюдайте лучшие практики там, и что большая часть работы.
Когда я настраивал базы данных в защищенной среде, единственным сервером, который был в той же физической сети с сервером базы данных, был сервер приложений. Доступ к серверу базы данных возможен двумя способами:
- Сервер приложений
- Console
Поэтому, чтобы скомпрометировать сервер базы данных, им придется скомпрометировать сервер приложений.
Итак, заблокируйте сервер приложений. Конечно, единственное, что хуже, чем быть скомпрометированным, скомпрометировано и не знает об этом. Если вы обнаружите компромисс, вам нужно исправить эту уязвимость, если она есть. Здесь важны криминалистика (включить журналы и контролировать их). Вам также нужен план восстановления.
Предотвращение, обнаружение, исправление и восстановление имеют первостепенное значение.