【问题标题】:Spring boot JDBC with password lease/renew (as in Vault)带有密码租用/续订的 Spring Boot JDBC(如在 Vault 中)
【发布时间】:2016-11-29 11:16:05
【问题描述】:

可以设置Hashicorp的Vault,按需提供数据库密码;每个密码在续订之前可以使用一定的“租用”期限(例如 1 小时),并且可以设置最长使用期限,在此期限之后,密码必须被丢弃并重新获得。

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

问题:当连接尝试由于密码过期而失败时,我如何在 Spring Boot 中通过访问 Vault 来重置 JDBC 密码?

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

【问题讨论】:

    标签: spring-boot spring-jdbc


    【解决方案1】:

    查看 GitHub 上的这个开源项目;我认为这可能正是您正在寻找的。注意:从外观上看,这是一个 Spring Cloud Incubator 项目(未来有可能成为 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 Boot 应用程序 - 提供的示例只是一个主应用程序类:

    @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 服务器(如果它正在运行)。修改 您可以更改 Vault 服务器的位置的启动行为 使用 bootstrap.properties (如 application.properties 但对于 应用程序上下文的引导阶段),例如

    bootstrap.yml:

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

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

    port 设置 Vault 端口

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

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

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

    【讨论】:

    • 该项目允许将 Spring Boot 配置安全地存储在 Vault 中,但它似乎根本没有解决密码租用/更新功能。
    • 目前还没有更新功能。刷新静态机密不是什么大问题,但刷新数据库/服务机密是个问题。数据库以不同的方式处理用户更改。 MySQL 不关心您是否在 DB2 数据库崩溃时一旦建立连接就删除用户。我认为更新数据源/池是可行的。您应该通过偶尔重新启动服务来处理过期问题,以保持安全。我们必须仔细研究如何在不破坏您的应用的情况下使用到期/续订功能,因此我们尚未添加对它的支持。
    猜你喜欢
    • 2022-01-08
    • 2021-12-14
    • 2019-11-22
    • 2015-10-19
    • 2020-04-26
    • 2018-03-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多