Подтвердить что ты не робот

Django: mysql: 1045, "Доступ запрещен для пользователя

У меня есть вся установка, работающая месяцами на моем локальном компьютере.
Я устанавливаю на удаленном сайте сейчас. Создал новую базу данных 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, так как это не кажется правильным.

Любые указания относительно того, что может быть неправильным?

4b9b3361

Ответ 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;

Ответ 2

В моем случае 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',
    }
}

Ответ 3

@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 выполняется успешно.

Ответ 4

Также измените номер порта на "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'
    }
}

Ответ 5

Ссылаясь на ответ @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;

Ответ 6

насколько я понял, что someuser является гостевым пользователем базы данных, а не администратором, правильно?

Если это так, от вашего администратора базы данных MySQL, предоставите someuser для доступа к таблице окружения MySQL "mysql.user" следующим образом:

GRANT SELECT ON mysql. user TO 'someuser' @'%';

Мне это сработало, Иван

Ответ 7

Я использую эту конфигурацию, и она работает.

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
    'OPTIONS': {
        'read_default_file': '/etc/my.cnf',
    },
        #'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
    }
}