“sha256_password 或 caching_sha2_password 需要加密”

问题描述 投票:0回答:12

美好的一天。希望你们一切都好。有人可以帮我解决这个问题吗?

我是 MySQL 环境的新手。我正在尝试远程连接到 MySQL 数据库。我使用了下面的 python 代码并得到了这个错误。

Print(e) = "cryptography is required for sha256_password or 
             caching_sha2_password"

并且不知道如何解决该错误。

import pymysql as db

HOST = "XXXXX.XXX.XX”
PORT = XXXX
USER = "my_username"
PASSWORD = "my_password”
DB = "db_name"

try:
    connection = db.Connection(host=HOST, port=PORT,user=USER,                 
    passwd=PASSWORD, db=DB)

    dbhandler = connection.cursor()
    dbhandler.execute("SELECT * from table_name")
    result = dbhandler.fetchall()
    for item in result:
        print (DB)
 except Exception as e:
    print(e)

finally:
    connection.close()
python mysql cryptography mysql-python
12个回答
139
投票

错误消息可以变得更加全面和有帮助。为了修复这个“加密”包,需要安装。

pip install cryptography

27
投票

要使用“sha256_password”或“caching_sha2_password”进行身份验证,您需要安装额外的依赖项:

$ python3 -m pip install PyMySQL[rsa]

来源:https://pymysql.readthedocs.io/en/latest/user/installation.html


17
投票

值得一提的是,我今天在 Python 中通过 SQLAlchemy 使用 MySQL 时遇到了这个问题。事实证明我使用了错误的帐户密码。换句话说,如果您遇到此问题,您可能需要先确认您使用的密码是否正确。

FWIW,我不确定为什么这会生成加密消息。一路上有什么马车吗?


8
投票

“此报告表示 sha256_password 和 caching_sha2_password 这两种加密算法需要使用密码学。
虽然意思很清楚,但你可能不知道如何解决。
实际上,cryptography是一个python包,所以解决方案很简单:“

尝试在 cmd 或终端上运行

pip install cryptography

这是来源


6
投票

我今天在 Python 中通过 SQLAlchemy 使用 MySQL 时也遇到了这个问题。只需通过 mysql -u root -p 登录数据库即可消失。感谢@Ben 的提示。很可能发生了一些错误的事情。


6
投票

我收到消息是因为我的数据库尚未启动。


3
投票

我也遇到这个问题了。当我尝试在MySQL Worbench中使用@brcmipn的方法解决问题时,它告诉我MySQL正在超级安全模式下运行。所以我使用

SET GLOBAL READ_ONLY = OFF;

之后问题就不会再发生了。


2
投票
import mysql.connector
def connection():
    conn = mysql.connector.connect(host = "XXXXX",
                  user = 'XXXXX',
                  password = 'XXXXX',
                  database = 'login_page',
                  auth_plugin='mysql_native_password')

    c = conn.cursor()
    return c , conn

下载 mysql 连接器而不是 pymysql 并尝试以这种方式连接。它对我有用,希望对你也有用。


2
投票

如果你只是想修复这个运行时错误,

pip install cryptography
就足够了。

就我而言,当我使用 PyMySQL 以错误的密码连接 MySQL 8.0 时,会出现此错误。

caching_sha2_password
是MySQL 8.0默认的身份验证插件。如果密码正确,就不会出现错误。

第一轮身份验证失败后,PyMySQL 尝试使用 RSA 进行完整身份验证。

sha2_rsa_encrypt
功能依赖于加密包。

https://github.com/PyMySQL/PyMySQL/blob/930b25034f1a3b6e3a202e072675f163770b25cb/pymysql/_auth.py#L209C43-L209C43

即使安装了加密技术后,如果您的密码仍然错误,最终也会引发

(1045, "Access denied for user 'username'@'host' (using password: YES)")
错误。


1
投票

易于使用 MYSQL Workbench。创建一个新的 MySQL 用户并在“限制主机匹配”中填写您的 IP。默认为%。

enter image description here


1
投票

降级然后升级 PyMySQL 对我有用。在过去的几天里,这种情况在我身上发生了两次,分别是在 Ubuntu 20 和 22 上。我已经安装好了所有东西,并且在前一天一切都正常工作。事情是这样的:

PyMySQL 1.0.2 - 昨天可以工作,今天因加密错误而失败

降级至 0.9 - 有效,没有加密错误

升级回 1.0.2 - 有效


0
投票

我今天正在研究这个问题,@gajam 的答案是正确的。

您可以仔细检查您正在使用的数据库,并验证您正在使用的身份验证类型(即 MySQL 服务器)是否未设置为“sha256_password”或“caching_sha2_password”。您可以通过 MySQL WorkBench > 用户和权限进行检查。

如果设置了此选项并且您正在使用 pyMySQL 进行连接,那么您将必须安装 RSA 选项(如 @gajam 所评论)

请注意,当我偶然发现这个问题时,我也在使用 SQLAlchemy。

PyMySQL Instructions

© www.soinside.com 2019 - 2024. All rights reserved.