我试图使用Python3连接到GCP实例,并且不想使用云代理,我只想直接使用SSL证书进行连接,所以我按照GCP指南这里从具有ssl密钥保护的公共IP连接。
使用此方法可用于mysql客户端:
mysql -uroot -pMyPassWord -h 1.2.3.4 --ssl-ca=server-ca.pem --ssl-cert=client-cert.pem --ssl-key=client-key.pem但是,当我在Python中做我认为相同的事情时,我会得到一个错误:
from sqlalchemy import create_engine
db_connect_string='mysql+mysqldb://root:MyPassWord@1.2.3.4:3306/mydb'
ssl_args = {'ssl': {'ssl_cert':'./client-cert.pem', 'ssl_key':'./client-key.pem', 'ssl_ca':'./server-ca.pem'}}
engine = create_engine(db_connect_string, connect_args=ssl_args)
print(engine.table_names())错误是:
sqlalchemy.exc.OperationalError:(MySQLdb._exceptions.OperationalError) (1045,“用户'root'@'1.2.3.4‘(使用密码:YES)被拒绝访问”)(此错误的背景为:http://sqlalche.me/e/e3q8)
如果不是因为我:
我遗漏了什么?
发布于 2020-04-19 18:40:24
好的,终于起作用了。错误消息是误导性的,因为您希望它与白名单我的IP相关,但它不是。以下是工作代码:
from sqlalchemy import create_engine
db_connect_string='mysql+mysqldb://root:MyPassWord@1.2.3.4:3306/mydb'
ssl_args = {'ssl': {'cert':'./client-cert.pem', 'key':'./client-key.pem', 'ca':'./server-ca.pem'}}
engine = create_engine(db_connect_string, connect_args=ssl_args)
print(engine.table_names())mysqlclient需要一个带有密钥对的名为ssl的字典,但是我可以在堆栈中找到的所有其他答案要么是错误的,要么是它们被更改了。
以下是作为参数传递所需的字典链接:
下面是解释参数的MySQL文档:
https://dev.mysql.com/doc/refman/8.0/en/mysql-ssl-set.html
以下是完整的论点清单:
https://stackoverflow.com/questions/61308108
复制相似问题