如何使用来自烧瓶应用程序的SSL连接到mysql服务器

时间:2014-09-11 10:37:17

标签: flask sqlalchemy flask-sqlalchemy

我想通过烧瓶和

连接到mysql服务器
app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql://your-username:your-password@localhost/schema'

如何在连接中添加ca-cert,client-key和client-cert?

3 个答案:

答案 0 :(得分:8)

您可以在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_engine,请查看this post

答案 1 :(得分:1)

另一种解决方案是使用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之类的配置参数而不是直接使用create_engine来初始化SqlAlchemy引擎,则此方法很有用。

答案 2 :(得分:0)

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

在Azure中,它将是

app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql+pymysql://your-username:your-password@localhost/your-schema?ssl_ca=BaltimoreCyberTrustRoot.crt.pem'

其中,可以从here下载文件BaltimoreCyber​​TrustRoot.crt.pem。

类似地,here讨论了适用于AWS的解决方案。