您使用什么策略来避免在版本控制中存储密码?
目前,我将开发/测试/生产密码保存在三个不同的文件中,并在部署期间使用相应的文件。所有这些都致力于版本控制,但我对此并不满意,因为并非所有开发人员都需要知道这些密码(特别是外包的密码,只有在他们的项目持续时才能访问,这可能只有一个月)。
在数据库中存储密码不是一个很好的选择:
我正在考虑将部署配置从开发人员计算机移动到专用计算机,该计算机从版本控制中检出代码并运行构建/部署脚本,但我不确定最好的方法是什么。
我还需要说我不想要最终的安全性:我只是想避免在每个开发人员的磁盘上使用密码并使其变得太容易。
所以我要求你的经验/最佳实践。你是怎么做到的?
答案 0 :(得分:8)
特定于环境的配置属性我倾向于放入一个不在源代码管理中且不属于构建过程的属性文件。在设置新环境时,该设置的一部分是创建包含数据库地址,凭据和名称,相关远程主机名称等内容的属性文件。
在Spring中,您使用PropertyPlaceholderConfigurer
加载属性文件。它只需要Spring可以找到,这通常只是意味着将它放在应用程序服务器下的适当目录中。
或者,您使用wrapper来运行应用程序服务器,JVM启动选项包括将这些属性文件添加到类路径中,以便Spring可以找到它们。
答案 1 :(得分:6)
我已经看到了两种方法:
答案 2 :(得分:3)
这并不适用于所有情况,但这是使用NT AUTHORITY \ NETWORK SERVICE作为服务身份的光荣所在。如果您使用此身份,则无需维护密码它 - 您可以使用DOMAINNAME \ MACHINENAME $形式的计算机AD凭据来进行受保护的网络和数据库访问。
当然,还有一些需要注意的关键事项 - 其中最重要的是,在同一台服务器上没有两个共享安全边界的应用程序是这样托管的。
答案 3 :(得分:0)
将密码放在o / s用户环境变量中。
只有该用户或root才能读取该值,与文件相同,但没有机会将其检入源代码管理。
答案 4 :(得分:0)
我认为在存储库外部有一个 local_settings 是件好事。
答案 5 :(得分:0)
您可以将它们以加密形式存储,而不是不存储它们。因此,您不必在新开发人员启动时始终通过IM或EMail发送凭证文件的痛苦...您只需告诉他们项目特定的主密码一次,以便他们可以加密凭证。