使用 SSL 与命令行 Flywaydb ( flyway ) 部署数据库更改

Nor*_*moe 6 mysql sql-server deployment continuous-deployment flyway

我正在研究使用 flyway 的命令行工具从中央服务器部署到多个数据库平台的概念验证。(MySQL、Postgres 和 SQL Server)

我可以在没有 SSL 的情况下成功部署,但是它使用未加密的主机信息,例如到目标数据库服务器的登录名/密码/端口。我担心有可能会看到未加密的流量。

有没有人使用过使用 SSL 部署到的 flyway 命令行工具:MySQL SQL Server

我没有在文档中看到任何信息,除非我错过了。

感谢您的任何帮助和建议!

LJT*_*LJT 4

在 Flyway.conf 的 Flyway 示例中,它展示了如何向 jdbc url 添加附加值

# MySQL             : jdbc:mysql://<host>:<port>/<database>?<key1>=<value1>&<key2>=<value2>...
# PostgreSQL        : jdbc:postgresql://<host>:<port>/<database>?<key1>=<value1>&<key2>=<value2>...
# Redshift          : jdbc:postgresql://<host>:<port>/<database>?<key1>=<value1>&<key2>=<value2>...  
Run Code Online (Sandbox Code Playgroud)

例如,对于 Redshift/Postgres,您可以包含 ssl=true 标志

flyway.url=jdbc:postgresql://yourserver:5439/dbname?ssl=true
Run Code Online (Sandbox Code Playgroud)

您需要将数据库服务器密钥签名所用的公钥添加到您的主机信任存储中(对于 Redshift,请参阅http://docs.aws.amazon.com/redshift/latest/mgmt/connecting-ssl-support.html了解更多信息)详细信息),例如

${JAVA_HOME}/bin/keytool -keystore ${JAVA_HOME}/lib/security/cacerts -import -alias <alias> -file <certificate_filename>
Run Code Online (Sandbox Code Playgroud)

然后我不得不破解 Flyway 启动脚本 /flyway 以将信任库和密码包含在 JAVA_ARGS 中(它可能应该将这些作为变量)例如

JAVA_ARGS="-Djava.security.egd=file:/dev/../dev/urandom -Djavax.net.ssl.trustStore=/etc/pki/java/cacerts -Djavax.net.ssl.trustStorePassword=changeit"
Run Code Online (Sandbox Code Playgroud)