MySQL Community Server 8.0.16 - django.db.utils.OperationalError: (1045, «Доступ запрещен для пользователя (с использованием пароля: ДА)») - PullRequest
0 голосов
/ 01 мая 2019

Я использую Django2.2 с Python3 и MySQL8.0.16 для создания механизма ETL. В моем файле Django settings.py указан правильный логин для моего экземпляра MySQL. Я знаю, что эти данные верны, потому что я проверил их, чтобы вручную войти в MySQL из CLI. У меня проблемы с подключением к экземпляру MySQL из Django, и поле 'user' в журнале ошибок не совпадает ни с одним пользователем, которого я настроил на своем экземпляре MySQL. Фактически, поле 'user' в журнале ошибок на самом деле является пользователем системы UNIX на моем корпоративно выпущенном ноутбуке.

Я уже настроил пользователя, john , чтобы иметь доступ к следующим таблицам: (примечание: я хочу использовать production_tab , как только я смогу подключиться).

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| production_tab     |
| mysql              |
| performance_schema |
| sys                |
+--------------------+

Я использую корпоративный Macbook, поэтому не могу сменить пользователя по умолчанию в моей системе UNIX:

➜  project git:(master) ✗ dscl . list /Users | tail -5
my_corporate_username
root

Я попытался изучить пользователей MySQL для дальнейшей диагностики проблемы, и похоже, что my_corporate_username не зарегистрированный пользователь (который предназначен) и имя пользователя, которое я настроил, john зарегистрирован с паролем, который явно соответствует моему settings.py файлу:

mysql> SELECT user,authentication_string,plugin,host FROM mysql.user;
+------------------+------------------------------------------------------------------------+-----------------------+-----------+
| user             | authentication_string                                                  | plugin                | host      |
+------------------+------------------------------------------------------------------------+-----------------------+-----------+
| my_corporate_username           | XXXXXXXXXXX~OY7XYXYXHVSrQjUXYXYXYXXTbx/I.oXYXXYYkiCJ0XYXYXXo7yDLGI7 | caching_sha2_password | localhost |
| mysql.infoschema | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED | caching_sha2_password | localhost |
| mysql.session    | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED | caching_sha2_password | localhost |
| mysql.sys        | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED | caching_sha2_password | localhost |
| root             | *59A3E0XXXXXXXXXXXXXXXE093F493462XXXXXXXX                              | mysql_native_password | localhost |
+------------------+------------------------------------------------------------------------+-----------------------+-----------+

В моем файле settings.py у меня есть правильные учетные данные, которые позволили мне запросить базы данных show; во-первых, , что меня действительно смутило, почему (i) Я не могу подключиться к MySQL через правильные учетные данные для входа, которые позволяют мне войти через CLI и (ii) почему я получаю следующую ошибку при запуске python3 manage.py runserver :

django.db.utils.OperationalError: (1045, "Access denied for user 'my_corporate_username'@'localhost' (using password: YES)")

My settings.py file:

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'john',
        'PASSWORD': 'passwd',
        'PORT': '3306',
        'HOST': 'localhost',
    }
}

Я склонен думать, что некоторые из этих проблем происходят из-за какой-то странной проблемы с разрешениями, которая существует в самой базе данных или, возможно, в каком-то файле конфигурации? Это просто моя лучшая догадка. Спасибо за любую помощь! Ура!

1 Ответ

0 голосов
/ 02 мая 2019

NAME должно быть именем БД, а не пользователем.

Имя пользователя USER, которого у вас там нет.

Примерно так:

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'MyDatabase',
        'USER': 'john',
        'PASSWORD': 'passwd',
        'PORT': '3306',
        'HOST': 'localhost',
    }
}
...