Ответ 1
Я делаю это так для базы данных с именем foo_db:
create database foo_db;
create user foo_user identified by 'foo_password';
grant all on foo_db.* to 'foo_user'@'%';
flush privileges;
У меня есть вся установка, работающая месяцами на моем локальном компьютере.
Я устанавливаю на удаленном сайте сейчас.
Создал новую базу данных mysql и создал нового пользователя ( "someuser" ) и дал ему полные гранты, например:
ПРОВЕРЬТЕ ВСЕ ПРИВИЛЕГИИ. TO 'someuser' @'localhost' IDENTIFIED BY 'somepassword' с опцией GRANT;
Я синхронизировал db, используя "python manage.py syncdb", и были созданы правильные таблицы. Мой параметр settings.py имеет этого же пользователя.
Но когда я пытаюсь войти в систему через приложение, и он попадает в БД, я вижу следующее в журналах -
(1045, "Доступ запрещен для пользователя" someuser "@" localhost "(с использованием пароля: YES)" )
Я вошел в систему через mysql (установленный в том же поле, что и django), и проверил гранты, и он правильно показывает -
Гранты для someuser @localhost
ПРЕДОСТАВЛЯЙТЕ ВСЕ ПРИВИЛЕГИИ НА *. * TO 'someuser' @'localhost' IDENTIFIED BY PASSWORD '* thesaltedpasswordOverHere' WITH GRANT OPTION
Я не хочу использовать root user/password для django, так как это не кажется правильным.
Любые указания относительно того, что может быть неправильным?
Я делаю это так для базы данных с именем foo_db:
create database foo_db;
create user foo_user identified by 'foo_password';
grant all on foo_db.* to 'foo_user'@'%';
flush privileges;
В моем случае settings.py имеет следующее:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'TRYDJANGO',
'USERNAME':'user_trydjango',
'PASSWORD':'passtry',
'PORT':'3306',
'HOST': 'localhost',
}
}
И он работает, если я изменил "USERNAME" на "USER":
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'TRYDJANGO',
'USER':'user_trydjango',
'PASSWORD':'passtry',
'PORT':'3306',
'HOST': 'localhost',
}
}
@mattblang:
В этом случае это помогает, если хост также установлен в фактически использованном файле settings.py
.
Для меня это /etc/graphite/local_settings.py
, где DATABASES Stanzas
имеет неправильное значение, для HOST:
'HOST': '127.0.0.1',
Потому что во время выполнения команды syncdb он искал localhost, я изменил его на
'HOST': 'localhost',
Теперь это выглядит примерно так:
DATABASES = {
'default': {
'NAME': 'graphite',
'ENGINE': 'django.db.backends.mysql',
'USER': 'graphite',
'PASSWORD': 'thepasswordyouchoose',
'HOST': 'localhost',
'PORT': '3306'
}
}
... и теперь команда syncdb
python manage.py syncdb
выполняется успешно.
Также измените номер порта на "3307" на MySql-python для 64-битных в settings.py, тогда только подключение происходит в Windows и MySql 5.7 django.
'3306' для MySql-python 32-разрядный
DATABASES = {
'default': {
'NAME': 'graphite',
'ENGINE': 'django.db.backends.mysql',
'USER': 'graphite',
'PASSWORD': 'thepasswordyouchoose',
'HOST': 'localhost',
'PORT': '3307'
}
}
Ссылаясь на ответ @duffymo и изменив последнее утверждение, может работать для меня.
create database foo_db;
create user foo_user identified by 'foo_password';
grant all on foo_db.* to [email protected] identified by 'foo_password' with grant option;
насколько я понял, что someuser является гостевым пользователем базы данных, а не администратором, правильно?
Если это так, от вашего администратора базы данных MySQL, предоставите someuser для доступа к таблице окружения MySQL "mysql.user" следующим образом:
GRANT SELECT ON mysql
. user
TO 'someuser' @'%';
Мне это сработало, Иван
Я использую эту конфигурацию, и она работает.
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'OPTIONS': {
'read_default_file': '/etc/my.cnf',
},
#'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
}
}