不幸的是,我不能让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
旗帜。
我希望你们中的一些人能看到我遗漏了什么!
暂无答案!
目前还没有任何答案,快来回答吧!