MySQL Community Server 8.0.16-django.db.utils.OperationalError:(1045,“拒绝用户访问(使用密码:是)”)

时间:2019-05-01 19:06:27

标签: mysql django mysql-python django-2.2

我正在将Django2.2与Python3和MySQL8.0.16结合使用来构建ETL引擎。我在Django settings.py 文件中配置了正确的MySQL实例登录信息。我知道此数据是正确的,因为我已经对其进行了测试,可以从CLI手动登录到MySQL。我无法从Django连接到MySQL实例,并且错误日志中的'user'字段与我在MySQL实例上配置的任何用户都不匹配。实际上,错误日志中的'用户'字段实际上是我公司发行的便携式计算机上UNIX系统上的用户。

我已经设置了一个用户 john 来访问以下表格:(注意:一旦我可以实际连接,我想使用 production_tab )。 / p>

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)我无法通过允许我通过CLI登录的正确登录凭据连接到MySQL,以及(ii)为什么运行 python3 manage.py runserver 时出现以下错误:

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',
    }
}

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

2 个答案:

答案 0 :(得分:0)

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

用户名是USER,您没有该用户名。

类似这样的东西:

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

答案 1 :(得分:0)

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

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

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