环境变量中的数据库凭据?

时间:2018-11-15 08:10:52

标签: java database spring spring-boot

Stackoverflow和其他站点上的许多开发人员建议将数据库密码存储在环境变量中。我们正在使用Spring Boot,我们想知道这是否是避免在application.properties文件中甚至在生产环境中使用纯文本密码的一种好方法(安全且通用)?如果没有,什么是更好的解决方案?

请注意,对于DEV和PROD,我们需要不同的.properties文件。

3 个答案:

答案 0 :(得分:0)

我建议您看看Spring Cloud Config

  

Spring Cloud Config为以下方面提供服务器和客户端支持   分布式系统中的外部化配置。使用配置   您可以在服务器上集中管理以下方面的外部属性   所有环境中的应用程序。

功能:

  

Spring Cloud Config Server功能:

     
      
  • 用于外部配置的HTTP,基于资源的API(名称-值对或等效的YAML内容)
  •   
  • 加密和解密属性值(对称或不对称)
  •   
  • 使用@EnableConfigServer
  • 可轻松在Spring Boot应用程序中嵌入   
     

配置客户端功能(用于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/