ssl不与MySQLdb一起工作,但与mysqlconn一起工作

2024-06-25 23:21:39 发布

您现在位置:Python中文网/ 问答频道 /正文

不幸的是,我无法让MySQLdb正常工作,也无法通过命令行连接到需要使用SSL的AWS服务器。通过Sequempro这很奇怪的工作。在

什么有效?在

除了上面提到的GUI之外,我以编程方式使用mysqlconnector而不是{}作为引擎,并传递ssl参数,这样可以:

from sqlalchemy import create_engine
import pandas as pd

pd.read_sql("SHOW DATABASES", 
    create_engine(CONNECTION_STRING.replace('mysqldb', 'mysqlconnector'),
    connect_args={'ssl_ca': '~/Downloads/rds-combined-ca-bundle.pem'}))

什么不管用?在

出于某些原因,我不想使用mysqlconnector而是MySQLdb。因此,我尝试了以下两种方法:

^{pr2}$

对于第一个,它给出预期的访问被拒绝:

OperationalError: (_mysql_exceptions.OperationalError) (1045, "Access denied for user 'MYUSER'@'MYHOST' (using password: YES)") (Background on this error at: http://sqlalche.me/e/e3q8)

对于第二个:

OperationalError: (_mysql_exceptions.OperationalError) (2026, 'SSL connection error: error:00000001:lib(0):func(0):reason(1)') (Background on this error at: http://sqlalche.me/e/e3q8)

从google上搜索到“error:00000001:lib(0):func(0):reason(1)”错误,我想到了误用包,并多次尝试了各种变体(包括mode=VERIFY_IDENTITY,传递密码)如下:

mysql -h HOST --ssl-ca=~/Downloads/rds-combined-ca-bundle.pem -u USER -p
Enter password:
ERROR 2026 (HY000): SSL connection error: error:00000001:lib(0):func(0):reason(1)

抛出同样的错误。在

想法

可能这在mysqlconnector上有效(不传递任何内容),因为ssl包(据我所知,我尝试过的其他两个选项都没有使用它,但肯定是从connector)输出的ssl.get_default_verify_paths()

DefaultVerifyPaths(cafile='~/anaconda2/ssl/cert.pem', capath=None, openssl_cafile_env='SSL_CERT_FILE', openssl_cafile='~/anaconda2/ssl/cert.pem', openssl_capath_env='SSL_CERT_DIR', openssl_capath='~/anaconda2/ssl/certs')

,所以有一些默认的配置可以让这个功能正常工作(sequelPro可能也一样)。但总的来说,我只是不明白为什么它能很好地与sequepro和connector包一起工作,而不是命令行和MySQLdb。在

尝试以下操作(从here)可以正常工作:

mysql -u MYUSER -h MYHOST --ssl -p

但由于--ssl标志的不推荐使用。在

我希望你们中的一些人能看到我遗漏了什么!在


Tags: ssllibmysqlerrorpemcafuncreason