如何从flask应用程序通过SSL连接到mysql服务器

如何从flask应用程序通过SSL连接到mysql服务器,flask,sqlalchemy,flask-sqlalchemy,Flask,Sqlalchemy,Flask Sqlalchemy,我想通过flask和连接到mysql服务器 app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql://your-username:your-password@localhost/schema' 如何将ca证书、客户端密钥和客户端证书添加到连接?您可以在URI中添加这些信息,如下所示: app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql://your-username:your-password@localhost

我想通过flask和连接到mysql服务器

app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql://your-username:your-password@localhost/schema'

如何将ca证书、客户端密钥和客户端证书添加到连接?

您可以在URI中添加这些信息,如下所示:

app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql://your-username:your-password@localhost/schema?ssl_key=MyCertFolder/client-key.pem&ssl_cert=MyCertFolder/client-cert.pem'

或者使用SQLAlchemy create_引擎,看看

如果需要使用基于云的MySQL服务,此配置将略有不同。比如说,

在Azure中,它将是

app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql+pymysql://your-username:your-password@localhost/your-schema?ssl_ca=BaltimoreCyberTrustRoot.crt.pem'
其中,文件BaltimoreCyberTrustRoot.crt.pem可从下载


类似地,也讨论了AWS的解决方案。

另一种解决方案是使用sqlalchemy.engine.url.url来定义url

sqlUrl = sqlalchemy.engine.url.URL(
    drivername="mysql+pymysql",
    username=db_user,
    password=db_pass,
    host=db_host,
    port=3306,
    database=db_name,
    query={"ssl_ca": "main_app/certs/BaltimoreCyberTrustRoot.crt.pem"},
)
create_engine(sqlUrl)
您可以将SSL参数作为字典包含在查询参数中

如果您使用Flask使用配置参数(如SqlAlchemy_DATABASE_URI)初始化SqlAlchemy引擎,而不是直接使用create_引擎,那么这种方法非常有用