我正在研究使用flyway的命令行工具从中央服务器部署到多个数据库平台的概念验证。 (MySQL,Postgres和SQL Server)
我能够在没有SSL的情况下成功部署,但是它使用未加密的主机信息,例如登录/密码/端口到目标数据库服务器。我担心的是,有可能看到未加密的流量。
有没有人有使用SSL部署到的flyway命令行工具的经验: MySQL的 SQL Server
除非我错过了,否则我没有在文档中看到任何信息。
感谢您提供任何帮助和建议!
答案 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
参数。