Я администрирую два сервера, которые следуют модели машин разработки и производства.
Производственная машина представляет собой разобранное программное обеспечение, работающее с ограниченным набором правил и ограниченным доступом. Однако машина разработки намного более открыта - разработчики могут запросить установку практически всего (за некоторыми исключениями), и они получают неограниченное количество баз данных MySQL для тестирования.
Однако на обоих серверах разработчики должны запросить новую комбинацию имени пользователя / пароля / базы данных, которая обычно принимается на машине разработки и принимается только на производственной машине, когда веб-приложение завершено, отшлифовано, безопасно и готово к запуску. .
Есть ли способ создать для каждого разработчика на машине разработки пользователя с разрешением создавать (просто создавать, а не читать / изменять / стирать) пользователей шаблонов с фиксированным набором разрешений? Таким образом, они могли создать свой собственный новый безопасный набор имени пользователя / пароля / базы данных, не дожидаясь, пока я приму их запрос.
Наш сервер разработки доступен снаружи (поэтому разработчики могут использовать ssh и работать из дома), поэтому я не хочу давать одному пользователю много разрешений из-за экспериментального характера приложений, размещенных на сервере. (Если база данных скомпрометирована, лучшее, что он может сделать, это удалить базу данных приложения вместо всех баз данных, к которым пользователь имеет доступ).
MySQL не имеет понятия «шаблонные разрешения». Есть несколько полезных типов разрешений, но они недостаточно детализированы, чтобы создать что-то эквивалентное.
Пользователь, создающий базу данных, должен выполнить три шага:
Как видите, все это около работает, кроме части создания пользователя. Возможный компромисс - создание пользователей для каждого разработчика, которые могут создавать и использовать несколько тестовых баз данных:
grant all privileges on `dev1_%`.* to 'dev1'@'%' identified by 'password';
grant create on `dev1_%`.* to 'dev1'@'%' identified by 'password';
Это создаст пользователя «dev1», который сможет создавать и использовать базы данных только начиная с «dev1_».
Поскольку MySQL не может предоставить решение самостоятельно, я бы рекомендовал просто написать программу для выполнения шагов по созданию базы данных и имени пользователя. Разработчики могут вызвать такую проблему:
create_dev_database --comment "xyz app test database" database_name username
Поскольку ваша программа контролирует создание базы данных / пользователей, вы можете:
Такая программа должна будет использовать и защищать ваш пароль root MySQL. Как это будет достигнуто, зависит от платформы.
Удачи!
Умм, почему бы разработчикам не управлять своими серверами внутри своих виртуальных машин разработки с теми же блокировками безопасности, что и в производственной среде (хотя и с другими паролями и т. Д.)?
Я что-то упустил? Разве разработка не должна быть такой же, как и производство, и разве у каждого разработчика не должно быть собственной среды, с которой он может играть сколько угодно?