Stackoverflow和其他站点上的许多开发人员建议将数据库密码存储在环境变量中。我们正在使用Spring Boot,我们想知道这是否是避免在application.properties文件中甚至在生产环境中使用纯文本密码的一种好方法(安全且通用)?如果没有,什么是更好的解决方案?
请注意,对于DEV和PROD,我们需要不同的.properties文件。
答案 0 :(得分:0)
我建议您看看Spring Cloud Config:
Spring Cloud Config为以下方面提供服务器和客户端支持 分布式系统中的外部化配置。使用配置 您可以在服务器上集中管理以下方面的外部属性 所有环境中的应用程序。
功能:
Spring Cloud Config Server功能:
- 用于外部配置的HTTP,基于资源的API(名称-值对或等效的YAML内容)
- 加密和解密属性值(对称或不对称)
- 使用
可轻松在Spring Boot应用程序中嵌入@EnableConfigServer
配置客户端功能(用于Spring应用程序):
- 绑定到Config Server并使用远程属性源初始化Spring Environment
- 加密和解密属性值(对称或不对称)
您可以找到配置服务器here
的有效示例。答案 1 :(得分:0)
这全部取决于您部署应用程序的方式。 Spring Boot使用特定的顺序来设置属性。参见:https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-external-config.html
有多种方法可以不向您公开太多密码,但是如果有足够的访问权限并且知道他们在哪里看,则始终可以看到该密码。
例如。如果您在docker上运行应用程序,则可能需要将所有密码设置为环境变量。
但是另一个示例是在启动应用程序时将其设置为属性
$ java -jar myproject.jar --property=value
您必须选择最适合您的需求。
答案 2 :(得分:0)
您可以将HashiCorp Vault与Spring Boot:https://projects.spring.io/spring-vault/一起使用,或者如果您使用云:https://cloud.spring.io/spring-cloud-vault/