【问题标题】:How to connect SQLAlchemy to a GCP CLoud SQL instance using SSL?如何使用 SSL 将 SQLAlchemy 连接到 GCP CLoud SQL 实例?
【发布时间】:2020-08-02 02:35:59
【问题描述】:

我正在尝试使用 Python 3 连接到 GCP Cloud SQL 实例并且不想使用云代理,我只想使用 SSL 证书直接连接,所以我按照 GCP 指南 here 从公共连接使用 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)

如果不是因为我:

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

我错过了什么?

【问题讨论】:

    标签: python google-cloud-platform sqlalchemy google-cloud-sql


    【解决方案1】:

    OK 终于搞定了。该错误消息具有误导性,因为您希望它与将我的 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 的字典,其中包含密钥对,但我可以在堆栈上找到的所有其他答案要么是错误的,要么可能已被更改。

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

    https://mysqlclient.readthedocs.io/user_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 的目录的路径名 证书文件。
    • cipher:SSL 加密的允许密码列表。

    【讨论】:

      猜你喜欢
      • 2022-07-26
      • 2022-03-09
      • 2020-06-03
      • 1970-01-01
      • 1970-01-01
      • 2019-12-07
      • 2020-08-31
      • 1970-01-01
      • 2020-07-01
      相关资源
      最近更新 更多