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

时间:2015-09-29 19:21:57

标签: 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()

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

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

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

8 个答案:

答案 0 :(得分:2)

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

  1. 用户名错误。
  2. 密码错误。
  3. 您要连接的IP地址/主机名不是MySQL已配置为允许该用户使用的IP地址/主机名。
  4. 用户无权访问指定的数据库。
  5. MySQL的用户实际上是用户和可以连接的模式的组合。例如'用户' @' 10.0.23.99'或者'测试'%'%'或者' fred' @' 196.168.123。%'或者' @'%。example.com'

    使用MySQL客户端,检查"用户"表中的" mysql"数据库,以查看MySQL知道的用户以及可以连接的主机。

    e.g。

    mysql> SELECT user, host FROM mysql.user WHERE user = 'youruser';
    

    查看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进行连接。为此,请省略主机和端口参数。

答案 1 :(得分:2)

对我来说,它正在固定正确的端口(安装时已更改默认端口,因为它已被使用)。

答案 2 :(得分:1)

我收到此错误是因为我的配置文件中有引号。

[mysql]
username: 'uuuu'
password: 'pppp'
host: 'localhost'
database: 'dddd'

给了我错误。但是,删除引号有效:

[mysql]
username: uuuu
password: pppp
host: localhost
database: dddd

答案 3 :(得分:1)

我想为原因添加另一种可能性:MySQL和mysql-connector-python之间的版本不匹配。当我使用MySQL 5.6.24-72.2-logmysql-connector-python==8.0.13时,这个问题发生在我身上。降级为mysql-connector-python==8.0.5解决了该问题。尽管我使用的是Python 2,但希望这会为调试提供更多线索。

答案 4 :(得分:1)

我在完成同一任务时遇到很多麻烦。这是对我有用的东西:

我必须使用旧版密码加密选项(与MySQL 5.x兼容)来初始化新数据库:

Database initialization options screenshot

一旦我这样做,一切都会很好。我从这篇文章中得到了这个建议:

https://tableplus.com/blog/2018/07/failed-to-load-caching-sha2-password-authentication-plugin-solved.html

以下是一些规格:

  • 我正在使用Python 3.7
  • 我已安装MySQL 8.0.17和mysql-connector-python 2.0.4

答案 5 :(得分:1)

当我尝试将数据从python脚本传输到Raspberry Pi上的MySQL数据库时,我遇到了这个问题。

最初安装MySQL时,它将使用您输入的任何密码将您设置为用户“ root”。如果您随后更改了安全设置以具有强密码(如我一样),则密码必须具有大写,小写,数字和特殊字符。

这可能是您尝试连接到数据库时抛出的错误。

要对此进行补救:

登录到MySQL: sudo mysql --user=root

删除root用户: DROP USER 'root'@'localhost'; 创建一个新用户: CREATE USER 'root'@'localhost' IDENTIFIED BY 'password'; 授予用户所有权限: GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' WITH GRANT OPTION;

答案 6 :(得分:0)

尝试使用mysql命令行客户端:

mysql -h ##.##.#.## -P #### -u ### -p ########

答案 7 :(得分:0)

您需要从MySQL向root用户授予权限,正如您的异常消息所述。首先,您从命令行或您喜欢的MySQL客户端(例如MySQL工作台)登录MySQL。然后您授予您的用户权限(在本例中为root)。此link描述了如何从控制台登录MySQL,例如

mysql -h localhost -u root -p

然后您需要向用户root授予权限,例如

GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'password';

使用密码为从任何主机(%)到root的所有数据库提供完全权限。如果在授予权限时可以从Internet访问此服务器,则需要小心。