защита имени и пароля базы данных в веб-среде

В большинстве веб-приложений, которые работают с базой данных, нужно вводить учетные записи DB в настройках или файле конфигурации, например DATABASES переменная в settings.py в Django. Какова общая практика защиты таких кредитов, что только избранные немногие в команде знают кредитные листы и даже не могут подключиться к БД с одинаковыми кредитами (даже с той же машины, на которой выполняется приложение)?

3 голоса | спросил Sar009 13 12017vEurope/Moscow11bEurope/MoscowMon, 13 Nov 2017 08:58:49 +0300 2017, 08:58:49

3 ответа


3
  • Получить базу данных для непосредственного взаимодействия с системой auth серверов. т.е. MSSQL может использовать пользователя Windows, процесс выполняется так же, как пользователь доступа db

  • Поместите настройки производственной базы в систему развертывания. так что только команда ops имеет доступ.

  • Зашифруйте настройки и поместите ключ дешифрования в поле производства.

Но если вы действительно хотите быть в безопасности, вы должны быть дисциплинированными.

Сообщите разработчикам, что им не разрешено знать пароли, и если они их обнаружат, они должны сообщать об этом, чтобы их можно было изменить.

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

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

ответил Ewan 13 12017vEurope/Moscow11bEurope/MoscowMon, 13 Nov 2017 12:06:49 +0300 2017, 12:06:49
0

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

Для очень чувствительных систем существует несколько способов обеспечения безопасности, которые вы можете реализовать:

  • Администрирование производственных систем и развертывание для производства ограничено правилом двух человек : для входа в систему любые два уполномоченных лица должны входить в систему вместе. Однако реализация этого может быть нетривиальной.

  • Ваше приложение разбивается на отдельные службы, которые могут выполняться в изолированных контекстах, например. отдельные контейнеры. Чувствительные учетные данные ограничиваются одной службой. Хотя микросервисы популярны, они также, как правило, делают вашу систему намного сложнее. Обратите внимание, что администраторы и тот, кто может решить, какая версия службы будет развернута, все равно будет иметь полный доступ ко всем контейнерам.

Для одной команды оба этих подхода кажутся непропорционально дорогостоящими.

ответил amon 13 12017vEurope/Moscow11bEurope/MoscowMon, 13 Nov 2017 10:46:03 +0300 2017, 10:46:03
0

Учетные данные являются предметом доверия. Если вы не доверяете своим разработчикам по какой-либо причине, держите их подальше от соответствующих машин. Является ли это хорошей идеей, не является темой этого сообщения.

Нет необходимости записывать производственные учетные данные в файле django settings.py.

1) Одним из возможных решений является наличие global_settings.py, где вы произвольно определяете значения по умолчанию для всех. И разработчики используют свой собственный settings.py, который имеет глобальный импорт этих параметров и переопределяет эти значения по умолчанию с их учетными данными разработчика на своих машинах. global_settings.py управляется версиями, тогда как settings.py не является. Чтобы облегчить жизнь, вы можете предоставить settings.py.example, чтобы внести разумные предложения по настройке по умолчанию. global_settings.py может содержать только SQLite -Support, где, как в settings.py.example, вы можете предоставить возможную конфигурацию для Postgres без учетных данных.

То же самое касается OP, который, в свою очередь, имеет свой собственный settings.py для производства.

2) Другой возможностью было бы использовать environment variables, где определены учетные данные.

3) Существуют более сложные системы, такие как Hashicorps Vault .

Какой способ вы выбираете, зависит от вас.

ответил Thomas Junk 13 12017vEurope/Moscow11bEurope/MoscowMon, 13 Nov 2017 13:45:46 +0300 2017, 13:45:46

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132