2016-07-26 86 views
1

Hashicorp的Vault可以设置为根据需要提供数据库密码;每个密码可以在更新之前用于某个“租用”期(例如1小时),并且可以设置最长使用期,之后密码必须被刷新并且获得新密码。带密码租赁/更新(如Vault中)的Spring引导JDBC

在Spring Boot中,JDBC连接是在应用程序启动时配置的,并且假定JDBC密码在application.properties文件中编码(或者,通过Spring Cloud Config或在应用程序引导时获得)并永远使用。

问题:如何在Spring Boot中实现一种方式,以便在由于密码过期而导致连接尝试失败时通过访问保险库来重置JDBC密码?

有没有办法设置某种类型的处理程序在连接由于旧密码而失败时被调用,并将其重置为新值?

回答

1

查看此开源项目可在GitHub上获得;我想这可能只是你正在寻找的东西。注意:从外观上看,这是一个Spring云孵化器项目(将来有可能成为Spring官方认可的开源库),并且只有三个贡献者。您将不得不查看它是否“足够可靠”以满足您的需求。

https://github.com/spring-cloud-incubator/spring-cloud-vault-config

---这里是有用的信息快速摘要---

添加下面的依赖关系的pom.xml:

<dependency> 
    <groupId>org.springframework.cloud</groupId> 
    <artifactId>spring-cloud-vault-starter-config</artifactId> 
    <version>x.y.z</version> 
</dependency> 

创建一个标准的Spring启动应用程序 - 提供例子只是一个主要的应用类:

@SpringBootApplication 
@RestController 
public class Application { 

    @RequestMapping("/") 
    public String home() { 
     return "Hello World!"; 
    } 

    public static void main(String[] args) { 
     SpringApplication.run(Application.class, args); 
    } 

} 

运行时,它将从端口8200上的 默认本地Vault服务器(如果它正在运行)中选取外部配置。要修改 的启动行为,您可以使用bootstrap.properties(如application.properties,但应用程序上下文的 引导阶段)更改Vault服务器 的位置。

bootstrap.yml:

spring.cloud.vault: 
    host: localhost 
    port: 8200 
    scheme: http 
    connection-timeout: 5000 
    read-timeout: 15000 

host设置库主机的主机名。主机名称将用于SSL证书验证

port设置库端口

scheme方案设置为HTTP将使用普通HTTP。支持的方案是http和https。

connection-timeout以毫秒为单位的连接超时

read-timeout以毫秒为单位读取超时

+0

该项目允许一到春天引导配置存储库安全,但它似乎并没有解决所有的密码租赁/更新功能。 –

+0

还没有更新功能。刷新静态秘密并不是什么大问题,但提醒数据库/服务机密是一个问题。数据库以不同的方式处理用户更改。如果您在DB2数据库出现故障时建立连接,那么MySQL不关心您是否删除了用户。我认为更新数据源/池是可行的。你应该保持在安全的一面,通过重新启动你的服务一段时间来处理到期。我们已仔细研究如何在不破坏应用的情况下使用到期/更新功能,因此我们尚未添加对它的支持。 – mp911de