2013-08-18 5 views
3

Я только начал на проект Django и в файле settings.py проекта, секция daabase выглядит следующим образом:MySQL пароль в Django

DATABASES = { 
    'default': { 
     'ENGINE': 'django.db.backends.mysql', # Add 'postgresql_psycopg2', 'mysql', 'sqlite3' or 'oracle'. 
     'NAME': 'blogengine',     # Or path to database file if using sqlite3. 
     # The following settings are not used with sqlite3: 
     'USER': 'blogadmin', 
     'PASSWORD': '[email protected]', 
     'HOST': 'localhost',     # Empty for localhost through domain sockets or '127.0.0.1' for localhost through TCP. 
     'PORT': '3306',      # Set to empty string for default. 
    } 
} 

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

+0

http://stackoverflow.com/questions/3540339/is-it-okay-that-database-credentials-are-stored-in-plain-text –

+0

https://code.djangoproject.com/ticket/16874 –

ответ

9

Нет смысла пытаться защитить этот пароль.

Любой токен в этом файле, который может быть использован для доступа к базе данных, может использоваться кем-либо еще для доступа к базе данных. Вот как работает общая секретная безопасность. Замените пароль с помощью произвольно сгенерированного токена, и вам все равно придется связывать этот токен с settings.py.

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

+0

Хорошо .. Я думаю, что понял. – rahuL

4

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

export MYSQL_PASSWORD=1234 

и читать его из вашего Джанго приложения следующего образом

DATABASES = { 
    'default': { 
     'ENGINE': 'django.db.backends.mysql', # Add 'postgresql_psycopg2', 'mysql', 'sqlite3' or 'oracle'. 
     'NAME': 'blogengine',     # Or path to database file if using sqlite3. 
     # The following settings are not used with sqlite3: 
     'USER': 'blogadmin', 
     'PASSWORD': os.getenv('MYSQL_PASSWORD'), 
     'HOST': 'localhost',     # Empty for localhost through domain sockets or '127.0.0.1' for localhost through TCP. 
     'PORT': '3306',      # Set to empty string for default. 
    } 
} 

Вы должны сделать это для всех ваших «разумных данных», как EMAIL_HOST_PASSWORD, AWS лексемы и секреты и такого рода вещей, таким образом, вы отделяете конфигурацию от среды и вам не нужно изменять эти параметры на своем тестовом сервере или в локальной среде, вам просто нужно убедиться, что переменные среды одинаковы, но указывает на правильное местоположение в соответствии с вашей средой.

+3

... er. Это кажется плохой идеей. Везде, где эта переменная окружения экспортируется, она все еще находится в файле где-то, поэтому она все еще находится в cleartext на диске, и вы ничего не получаете, просто имея ее в файле настроек, за исключением того, что теперь у вас есть дополнительный файл, который вы должны сохраняйте безопасность. Переменные окружения не являются более закрытыми, чем нечитаемые во всем мире файлы, пользователь приложения всегда может просто cat/proc/(pid)/environ и видеть значения. – AdamKG

+1

Идея состоит в том, чтобы ограничить доступ, поэтому, только этот пользователь может видеть переменную, я обычно следую этому http://12factor.net/, а переменные окружения - это то, как я обнаружил, что несколько разработчиков работают в одном приложении и их локальных средах и не нужно менять множество параметров при развертывании на моем тестовом сервере или на моем рабочем сервере. – israelord

+1

наш параметр settings.py заносится в наш git, поэтому разработчики могут запускать его «из коробки», в то время как только сервер-админ знает пароль для фактического сервера Я думаю, что это способ пойти и должен намного больше повышать – wotanii