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

时间:2016-01-15 17:19:34

标签: mysql sql-server deployment flyway continuous-deployment

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

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

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

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

感谢您提供任何帮助和建议!

2 个答案:

答案 0 :(得分:3)

在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>...  

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

flyway.url=jdbc:postgresql://yourserver:5439/dbname?ssl=true

您需要将已签署数据库服务器密钥的公钥添加到主机信任存储区(对于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>

然后我不得不破解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"

答案 1 :(得分:0)

对于MySQL,我使用以下URL通过SSL连接。

jdbc:mysql://hostname:3306/wpastudy?useSSL=true

请注意useSSL=true参数。