从 Python 3 访问 MySQL:拒绝用户访问

Leo*_*Sun 11 python mysql

我尝试使用以下方法从 Python 3.3 访问 MySQL:

import mysql.connector

config = {
  'user': '###',
  'password': '******',
  'host': '##.##.#.##',
  'database': '########',
  'port': '####',
  'raise_on_warnings': True,
}

cnx = mysql.connector.connect(**config)

cnx.close()
Run Code Online (Sandbox Code Playgroud)

但是当我运行上面的代码时,我收到了这个错误:

 mysql.connector.errors.ProgrammingError: 1045 (28000): Access denied for user '###'@'##.##.#.###' (using password: YES);
Run Code Online (Sandbox Code Playgroud)

为什么我会收到此错误,我该如何解决?

Jia*_* Li 10

我想为原因添加另一种可能性:您的 MySQL 和mysql-connector-python. 当我使用 MySQL5.6.24-72.2-logmysql-connector-python==8.0.13. 降级以mysql-connector-python==8.0.5解决问题。虽然我使用的是 Python 2,但希望这能为调试提供更多线索。


Wod*_*din 4

这意味着 MySQL 由于以下原因之一拒绝了连接:

  1. 用户名错误。
  2. 密码错误。
  3. 您连接的 IP 地址/主机名不是 MySQL 已配置为允许该用户使用的 IP 地址/主机名。
  4. 用户无权访问指定的数据库。

MySQL 的用户实际上是用户和连接模式的组合。例如'user'@'10.0.23.99'或'test'@'%'或'fred'@'196.168.123.%'或'mary'@'%.example.com'

使用 MySQL 客户端,检查“mysql”数据库中的“user”表,以查看 MySQL 知道哪些用户以及可以从哪些主机进行连接。

例如

mysql> SELECT user, host FROM mysql.user WHERE user = 'youruser';
Run Code Online (Sandbox Code Playgroud)

查看 MySQL 文档以了解如何添加用户。另请参阅如何授予对不同表等的访问权限。

http://dev.mysql.com/doc/refman/5.5/en/adding-users.html

http://dev.mysql.com/doc/refman/5.5/en/grant.html

鉴于您的匿名 IP 地址看起来相同,我想您可能在运行 MySQL 的同一台机器上运行 Python 代码。如果是这样,您可能会发现您正在使用服务器的外部 IP 地址,而 MySQL 可能配置为仅接受来自 localhost/127.0.0.1 的连接。如果是这样,请尝试更改您要连接的 IP 地址。另外,通常如果您在数据库服务器上运行,则可以通过 Unix 域套接字而不是通过 TCP/IP 进行连接。为此,只需省略主机和端口参数即可。