ssl不与mysqldb一起使用,但与mysqlconnector一起使用

1qczuiv0  于 2021-06-21  发布在  Mysql
关注(0)|答案(0)|浏览(281)

不幸的是,我不能让mysqldb工作,也不能通过命令行连接到需要使用ssl的aws服务器。奇怪的是,通过Sequempro,它的效果很好。

什么有效?

除了上述gui之外,我还以编程方式使用 mysqlconnector 而不是 MySQLdb 作为引擎并传递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。因此,我尝试了以下两种方法:

conn = create_engine(CONNECTION_STRING)
pd.read_sql_query("SHOW DATABASES", conn)

conn = create_engine(
    CONNECTION_STRING,
    connect_args={'ssl': {'ca': '~/Downloads/rds-combined-ca-bundle.pem'}})
pd.read_sql_query("SHOW DATABASES", conn)

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

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)

从谷歌上搜索到 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 包(这是不使用的其他两个选项,我尝试了,因为我可以看到,但肯定从连接器)输出 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可能也是如此)。但总的来说,我只是不明白为什么它可以很好地与sequelpro和连接器包,但不与命令行或mysqldb。
尝试以下方法(从这里开始)效果很好:

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

但由于 --ssl 旗帜。
我希望你们中的一些人能看到我遗漏了什么!

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题