Совсем недавно у меня был разработчик, который случайно попытался восстановить базу данных в рабочем состоянии, когда он должен был восстановить ее в виде промежуточной копии. Это легко сделать, учитывая, что имена БД похожи, т. Е. CustomerName_Staging и CustomerName_Production.
В идеале, я хотел бы иметь их на совершенно разных блоках, но это непозволительно дорого, и, строго говоря, это не препятствует тому, чтобы происходило то же самое, если пользователь подключается к неправильному блоку.
По сути, это не проблема безопасности - это был правильный пользователь, работающий с промежуточной базой данных, и если над рабочей базой данных есть работа, то это будет и он. Я бы хотел иметь офицера по развертыванию, чтобы отделить эти проблемы, но команда не достаточно велика для этого.
Я хотел бы услышать несколько советов с точки зрения практики, конфигурации и контроля, как предотвратить это.
источник
Ответы:
Если вы часто это делаете, автоматизируйте это. И поскольку вы оба разработчики, написание некоторого кода должно быть в вашей рулевой рубке. :) Серьезно, хотя ... автоматизируя это, вы можете делать такие вещи, как:
И так далее. Вы ограничены только вашим воображением.
источник
Я не согласен с предположением в вопросе - это безопасность - но я также не согласен с тем, что автоматизация спасет день сам по себе. Я начну с проблемы:
Вы не должны быть в состоянии случайно сделать что-нибудь для производства!
Это включает в себя выполнение автоматических вещей случайно.
Вы путаете безопасность системы с такими понятиями, как «кому разрешено делать что». Ваши учетные записи разработчиков должны иметь возможность писать только в свои копии, на сервер контроля версий и базу данных dev. Если они могут читать / записывать производственные данные, их можно взломать и использовать для кражи данных клиентов или (как вы продемонстрировали) могут быть использованы для потери данных клиентов.
Вам нужно начать с сортировки вашего рабочего процесса.
Ваши учетные записи разработчиков должны иметь возможность писать в свои собственные копии, контролировать версии и, возможно, вытягивать контроль версий в среду тестирования.
Пользователи резервного копирования должны иметь возможность только читать с производства и записывать в хранилище резервных копий (которое должно быть точно защищено).
Любое другое чтение / запись на производстве должно потребовать специальной и неудобной аутентификации. Вы не должны быть в состоянии проникнуть в него или забыть, что вы вошли в систему. Физический контроль доступа здесь полезен. Смарт-карты, флип-переключатели для «постановки» на учетную запись, одновременный поворот двойного ключа доступа.
Доступ к производству не должен быть чем-то, что вам нужно делать каждый день. Большая часть работы должна быть выполнена на вашей платформе тестирования, и после тщательного изучения производятся развертывания вне рабочего дня. Небольшое неудобство не убьет вас.
Автоматизация является частью решения.
Я не закрываю глаза на тот факт, что полный оборот (загрузка в VCS, проверка покрытия, загрузка на тестовый сервер, запуск автоматических тестов, повторная аутентификация, создание резервной копии, получение из VCS) - длительный процесс.
Вот где может помочь автоматизация, согласно ответу Бена. Существует множество различных языков сценариев, которые значительно облегчают выполнение определенных задач. Просто убедитесь, что вам не слишком легко делать глупости. Ваши шаги по повторной аутентификации должны все еще быть объявлены (и если опасно), они должны быть неудобными и трудными сделать без размышлений.
Но в одиночку автоматизация хуже, чем бесполезна. Это просто поможет вам делать большие ошибки с меньшим количеством мыслей.
Подходит для команд всех размеров.
Я заметил, что вы указали размер вашей команды. Я один парень, и я прошел через это, потому что только один человек может попасть в аварию. Есть накладные расходы, но оно того стоит. В итоге вы получаете гораздо более безопасную и гораздо более безопасную среду разработки и производства.
источник
У одного из моих коллег есть интересный подход к этому. Его терминальная цветовая гамма для производства нечеткая . Серый и розовый и трудно читаемый, что теоретически должно гарантировать, что все, что он пишет, он действительно намеревался написать.
Ваш пробег может варьироваться ... и я, вероятно, не должен сказать, что он вряд ли пуленепробиваемый сам по себе. :)
источник
Разработчики не должны знать пароль к производственной базе данных. Пароль prod должен быть случайным и не запоминающимся - что-то вроде результата затирания клавиатуры (
Z^kC83N*(#$Hx
). Ваш пароль разработчика может быть$YourDog'sName
илиcorrect horse battery staple
или как угодно.Конечно, вы можете узнать, какой пароль, особенно если вы небольшая команда, посмотрев файл конфигурации клиентского приложения. Это единственное место, где должен существовать пароль prod. Это гарантирует, что вам придется приложить целенаправленные усилия для получения пароля Prod.
(Как всегда, у вас должны быть резервные копии на определенный момент времени для вашей производственной базы данных. Например, в MySQL архивируйте двоичные журналы как инкрементные резервные копии. Для PostgreSQL архивируйте журналы опережающей записи. Это ваша последняя защита любой вид бедствия, нанесенный самому себе или иным образом.)
источник
Краткий ответ - RBAC - управление доступом на основе ролей.
Ваши разрешения для всех сред должны быть разными - и такие же раздражающие, как такие вещи, как UAC, вам нужны, особенно для сред PROD.
Там нет НИКОГДА причины дэвов , чтобы иметь прямой доступ к Prod - независимо от того, насколько мала организации / команда. Ваш "Dev" может также носить шляпы "Stage" и "Prod", но ему нужно иметь разные учетные данные и процессы для работы в разных средах.
Это раздражает? Абсолютно. Но разве это [помогает] не мешать вашей среде? Абсолютно.
источник
Быстрое и простое решение: используйте две разные учетные записи пользователей: одну для обычной работы по разработке, которая имеет доступ только к базе данных разработки, и другую для фактического использования в рабочей базе данных с полным доступом к ней. Таким образом, вам придется активно менять учетную запись, которую вы используете, прежде чем вы сможете внести какие-либо изменения в производство, что должно быть достаточно для предотвращения случайных ошибок.
Тот же подход можно использовать, если у вас есть два веб-сайта, или два сервера, или две целые среды: одна учетная запись пользователя для разработки без доступа (или, по крайней мере, без права записи ) к рабочей среде , другая учетная запись пользователя для работы в производственной системе ( с).
Это тот же подход, что и у системного администратора, имеющего стандартную учетную запись без прав администратора для рутинной работы (чтение электронной почты, веб-серфинг, отслеживание билетов, составление расписаний, написание документации и т. Д.) И отдельной учетной записи полного администратора, которая будет использоваться при фактической работе. на серверах и / или Active Directory.
источник