MySQL Community Server 8.0.16 - django.db.utils.OperationalError: (1045, "Access denied for user (using password: YES)")

MySQL Community Server 8.0.16 - django.db.utils.OperationalError: (1045, "Access denied for user (using password: YES)")

我将 Django2.2 与 Python3 和 MySQL8.0.16 一起使用来构建 ETL 引擎。我在我的 Django settings.py 文件中为我的 MySQL 实例配置了正确的登录信息。我知道这个数据是正确的,因为我已经测试过它可以从 CLI 手动登录到 MySQL。我在从 Django 连接到 MySQL 实例时遇到问题,并且错误日志中的 '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[=12=]5$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED | caching_sha2_password | localhost |
| mysql.session    | $A[=12=]5$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED | caching_sha2_password | localhost |
| mysql.sys        | $A[=12=]5$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED | caching_sha2_password | localhost |
| root             | *59A3E0XXXXXXXXXXXXXXXE093F493462XXXXXXXX                              | mysql_native_password | localhost |
+------------------+------------------------------------------------------------------------+-----------------------+-----------+

在我的 settings.py 文件中,我有正确的凭据,允许我在第一个中查询 show databases;我真的很困惑为什么 (i) 我无法通过允许我通过 CLI 登录的正确登录凭据连接到 MySQL 以及 (ii) 为什么我在 [=71 时收到以下错误=] python3 manage.py 运行服务器:

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

我的settings.py文件:

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

我倾向于认为其中一些问题是由于数据库本身或某些配置文件中存在的一些不稳定的权限问题而发生的?那只是我最好的猜测。感谢您提供的所有帮助!干杯!

NAME 应该是数据库的名称 - 而不是用户。

用户名是 USER,你那里没有。

像这样:

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

我也遇到了这个问题。如果我对密码进行硬编码,它就可以正常工作。但是,一旦我尝试从我的 .env 文件加载密码,它就会抛出您所说的相同错误:

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

作为旁注;我的密钥正在从同一个 .env 文件中正常加载。