SQLAlchemy中如何设置数据库连接参数

我们的Python编写的服务程序使用了SQLAlchemy访问数据库系统(MySQL). 为了满足PCI DSS安全性合规的要求, 我们需要使用TLS v1.1或TLS v1.2来加密数据库连接.

在配置好了数据库服务器端的TLS以后, 我们还需要配置数据库客户端的参数. 对于MySQL客户端来说, 最少应该配置 TLS CA的路径. 我们使用了MySQL Connector/Python作为数据库连接驱动程序, 它支持的配置参数是 ssl_ca. 我们不是直接使用MySQL Connector/Python, 而是通过SQLAlchemy来调用的, 因此我们需要寻找SQLAlchemy中的配置.

在SQLAlchemy中, 与数据库连接相关的是其Engine对象. Engine的配置可以分为两类. 第一类是对于SQLAlchemy而言的, 与底层的数据库驱动程序无关的; 第二类是特定于底层的数据库驱动程序的. 第一类主要与连接池, 字符编码等有关. 因此, 我们所需要的ssl_ca属于第二类的配置.

SQLAlchemy提供了三种方式来提供特定于数据库驱动程序的参数设置方式.

方式一: 附加于连接字符串之后.

mysql+mysqlconnector://user:password@host:port/dbname?ssl_ca=/etc/pki/ca/ca.pem&other_args

方式二: 代码之中, 传递connect_args字典给engine

方式三: 代码之中, 使用自定义的 connection creator.

参考

  1. SQLAlchemy 连接配置文档: http://docs.sqlalchemy.org/en/latest/core/engines.html
  2. MySQL Connector/Python 连接参数: https://dev.mysql.com/doc/connector-python/en/connector-python-connectargs.html