Как настроить разрешения базы данных для приложения Django? - PullRequest
17 голосов
/ 24 февраля 2010

Я ищу ссылки или ответ здесь о том, как правильно настроить разрешения базы данных для защиты приложения Django? Чтобы было ясно, я специально искал материал, касающийся грантов в базе данных, а не разрешений в самой структуре Django.

Ответы [ 4 ]

8 голосов
/ 24 февраля 2010

Я обычно:

grant all privileges on my_db.* to my_user@localhost identified by 'my_user_pass'
grant all privileges on test_my_db.* to my_user@localhost identified by 'my_user_pass'

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

Для работы django требуется минимальный выбор, вставка, обновление и удаление. Если вы вообще используете test или syncdb, вам также понадобится создавать таблицы и индексы (и, возможно, разрешение на загрузку файлов для sql-файлов).

Итак, для mysql db я бы предположил, что оптимальным набором разрешений может быть выбор, вставка, обновление, удаление, создание, индексирование и файл. Если вы хотите получить по-настоящему все необходимое, вы можете выборочно предоставить эти разрешения соответствующим образом на уровне таблицы (а не на уровне БД).

Лично мне легче набрать grant all ....

7 голосов
/ 06 июня 2013

Из документации Django:

https://docs.djangoproject.com/en/dev/topics/install/

Если вы планируете использовать команду Django manage.py syncdb для автоматического создания таблиц базы данных для ваших моделей (после первой установки Django и создания проекта), вам необходимо убедиться, что Django имеет разрешение на создание и изменение таблиц в база данных, которую вы используете; если вы планируете создавать таблицы вручную, вы можете просто предоставить Django SELECT, INSERT, UPDATE и DELETE разрешения. В некоторых базах данных Django будут нуждаться в привилегиях ALTER TABLE во время syncdb, но не будут создавать операторы ALTER TABLE для таблицы после того, как syncdb ее создаст. После создания пользователя базы данных с этими разрешениями вы укажете детали в файле настроек вашего проекта, см. БАЗЫ ДАННЫХ.

3 голосов
/ 11 января 2017

Я только что проверил начальную настройку с MySQL. Для python manage.py migrate как минимум вам нужны следующие гранты для простой операции (если вы используете db-подготовку):

  1. СОЗДАТЬ, ИЗМЕНИТЬ, ИНДЕКС
  2. ВЫБРАТЬ, ОБНОВИТЬ, ВСТАВИТЬ, УДАЛИТЬ

И, кстати, вопросы безопасности. Вы можете уменьшить воздействие атаки, ограничив воздействие вашей системы. В этом случае - вы можете ограничить «DROP» - это довольно большой плюс. Если вы оставите некоторую сложную дыру с возможностью SQL-инъекции - вы, вероятно, уменьшите ущерб. В будущем я буду исследовать, не удастся ли удалить ключевое слово DELETE - это также ограничит потенциальные угрозы. Просто потому, что время от времени мы все оставляем ошибки :)

0 голосов
/ 24 февраля 2010

Какова цель настройки разрешений на уровне БД? Если ваш сервер скомпрометирован, то злоумышленник сможет сделать что-нибудь с вашей базой данных (потому что у него есть логин / пароль), и разрешения не помогут. Если ваш сервер защищен, то разрешения бесполезны.

Разрешения могут иметь смысл, если ваш сервер БД доступен из внешнего мира, но это не очень хорошая идея.

...