首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用SSL将SQLAlchemy连接到GCP CLoud SQL实例?

问如何使用SSL将SQLAlchemy连接到GCP CLoud SQL实例?
EN

Stack Overflow用户
提问于 2020-04-19 16:51:07
回答 1查看 1.3K关注 0票数 1

我试图使用Python3连接到GCP实例,并且不想使用云代理,我只想直接使用SSL证书进行连接,所以我按照GCP指南这里从具有ssl密钥保护的公共IP连接。

使用此方法可用于mysql客户端:

代码语言:javascript
复制
mysql -uroot -pMyPassWord -h 1.2.3.4 --ssl-ca=server-ca.pem --ssl-cert=client-cert.pem --ssl-key=client-key.pem

但是,当我在Python中做我认为相同的事情时,我会得到一个错误:

代码语言:javascript
复制
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)

如果不是因为我:

  1. 已将我的公共IP地址1.2.3.4/32添加为授权网络。
  2. 我可以通过mysql客户端访问,那么为什么这个限制不适用于此呢?

我遗漏了什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-04-19 18:40:24

好的,终于起作用了。错误消息是误导性的,因为您希望它与白名单我的IP相关,但它不是。以下是工作代码:

代码语言:javascript
复制
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的字典,但是我可以在堆栈中找到的所有其他答案要么是错误的,要么是它们被更改了。

以下是作为参数传递所需的字典链接:

guide.html#installation

下面是解释参数的MySQL文档:

https://dev.mysql.com/doc/refman/8.0/en/mysql-ssl-set.html

以下是完整的论点清单:

  • mysql:从mysql_init()返回的连接处理程序。
  • key:客户端私钥文件的路径名。
  • cert:客户端公钥证书文件的路径名。
  • ca:证书颁发机构(CA)证书文件的路径名。如果使用此选项,则必须指定服务器使用的相同证书。
  • capath:包含可信SSL CA证书文件的目录的路径名。
  • 密码:用于SSL加密的允许密码列表。
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61308108

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档