公司通过flyway来控制数据库版本,生成环境中flyway.conf配置文件中直接明文暴露数据库连接及访问账号密码非常不安全,找了下发现flyway中可以通过gpg来对flyway.conf配置文件进行加密。访问链接:https://flywaydb.org/blog/flyway-6.4
gpg安装
GPG有两种安装方式。可以下载源码,自己编译安装。
./configure
make
make install
也可以安装编译好的二进制包。
# Debian / Ubuntu 环境
sudo apt-get install gnupg# Fedora 环境
yum install gnupg
安装完成后,键入下面的命令:
gpg --help
如果屏幕显示GPG的帮助,就表示安装成功。
生成密钥
查看关联链接1中生成密钥即可,这里在最后一步可能会出现卡住问题,一直过不去。解决方案是:新开一个窗口,通过 yum install rng-tools完成安装。之后再执行命令:rngd -r /dev/urandom。执行完命令后立刻生成。具体展示看关联链接2。
flyway加密
环境:flyway、mysql
对flyway进行加密,查看关联链接3
-r需指定用户id
我的flyway已经配置了全局,
将sql文件夹中创建一个空基线文件
因为可能有多套flyway配置文件,所以通过 -configFiles=-指定,而不是用conf下默认flyway.conf文件。因此清空conf文件夹
解密时为了安全考虑,会让你提示输入密码,在脚本执行就比较麻烦。因为我是gpg2.x版本,可以通过此命令读取指定密码文件。详情可以查看关联链接4。
我把密码写在了passwd文件里,通过参数指定,这样就不需要输入密码验证了。具体参数含义可以通过,man gpg或者gpg -h查看。还有几种方式可以参照关联链接4。
如何使用(将flyway执行机的公钥导出并提供给外部其它人员,通过公钥对flyway.conf进行加密,并将加密文件提供给flyway执行机进行解密操作)【这边还要考虑到私钥丢失等情况,防止出现密钥丢失无法解密自己的配置文件】
从flyway执行机上查看并导出公钥
将公钥文件传输到客户端机器,并导入公钥,对flyway.conf文件加密。
将加密后的flyway.conf文件传回flyway执行机,并尝试解密。
因为时间原因gpg使用了解不多,后续有时间再做添加深入。
关联链接1:http://www.ruanyifeng.com/blog/2013/07/gpg.html
关联链接2:https://blog.csdn.net/a910196454/article/details/109155979
关联链接3:https://flywaydb.org/documentation/usage/commandline/#configuration-from-standard-input
关联链接4:https://www.cnblogs.com/suanec/p/13039844.html
关联链接5-gpg文档:https://help.ubuntu.com/community/GnuPrivacyGuardHowto