ssl不使用MySQLdb但使用mysqlconnector

时间:2018-05-16 19:10:22

标签: python mysql ssl mysql-python mysql-connector-python

遗憾的是,我无法使MySQLdb工作,也无法通过命令行连接到需要我使用SSL的AWS服务器。这通过SequelPro可以很好地工作。

什么有用?

在提到的GUI旁边,我以编程方式使用mysqlconnector而不是MySQLdb作为引擎并传递ssl args,这样可行:

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包(我尝试的其他两个选项都没有使用,但我绝对可以从连接器中看到)输出{{1 }}:

ssl.get_default_verify_paths()

,所以有一些默认配置使这个工作(sequelPro可能相同)。但总而言之,我只是不明白为什么它可以与sequ​​elPro和连接器包一起工作,但不能使用命令行和MySQLdb。

尝试以下(来自here)可以正常工作:

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')

但由于mysql -u MYUSER -h MYHOST --ssl -p 标志已弃用,因此不是首选。

我希望你们中的一些人能够看到我在哪里错过了什么!

0 个答案:

没有答案