Ответ 1
Им нужен доступ к базе данных. Этот доступ будет осуществляться через бэкэнд базы данных, который может быть с сервером Django или один из стороннего пользователя.
Одна вещь, которую я сделал на моем сайте Django settings.py
, - это информация о доступе к базе данных загрузки из файла в /etc
. Таким образом, настройка доступа (узел базы данных, порт, имя пользователя, пароль) может отличаться для каждой машины, а конфиденциальная информация, подобная паролю, отсутствует в моем репозитории проектов. Возможно, вы захотите ограничить доступ к работникам аналогичным образом, сделав их подключенными к другому имени пользователя.
Вы также можете передать информацию о подключении к базе данных или даже просто ключ или путь к файлу конфигурации через переменные среды и обрабатывать ее в settings.py
.
Например, здесь, как я извлекаю файл конфигурации базы данных:
g = {}
dbSetup = {}
execfile(os.environ['DB_CONFIG'], g, dbSetup)
if 'databases' in dbSetup:
DATABASES = dbSetup['databases']
else:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
# ...
}
}
Излишне говорить, что вам нужно убедиться, что файл в DB_CONFIG
недоступен для любого пользователя, кроме админов db и самого Django. Случай по умолчанию должен относить Django к собственной тестовой базе данных разработчика. Также может быть лучшее решение, использующее модуль ast
вместо execfile
, но я еще не изучил его.
Еще одна вещь, которую я делаю, - это использовать отдельных пользователей для задач администрирования БД и всего остального. В моем manage.py
я добавил следующую преамбулу:
# Find a database configuration, if there is one, and set it in the environment.
adminDBConfFile = '/etc/django/db_admin.py'
dbConfFile = '/etc/django/db_regular.py'
import sys
import os
def goodFile(path):
return os.path.isfile(path) and os.access(path, os.R_OK)
if len(sys.argv) >= 2 and sys.argv[1] in ["syncdb", "dbshell", "migrate"] \
and goodFile(adminDBConfFile):
os.environ['DB_CONFIG'] = adminDBConfFile
elif goodFile(dbConfFile):
os.environ['DB_CONFIG'] = dbConfFile
Где конфигурация в /etc/django/db_regular.py
предназначена для пользователя с доступом только к базе данных Django с SELECT, INSERT, UPDATE и DELETE, а /etc/django/db_admin.py
- для пользователя с этими разрешениями плюс CREATE, DROP, INDEX, ALTER, и LOCK TABLES. (Команда migrate
от South.) Это дает мне некоторую защиту от jango-кода во время выполнения моей схемы во время выполнения, и это ограничивает повреждение, которое может вызвать атака SQL-инъекций (хотя вы все равно должны проверить и отфильтровать все входные данные пользователя).
Это не решение вашей точной проблемы, но оно может дать вам некоторые идеи о том, как улучшить настройку доступа к базе данных Django для ваших целей.