druid实现数据库密码加密功能

数据库密码直接写在配置中,对运维安全来说,是一个很大的挑战。可以使用Druid为此提供一种数据库密码加密的手段ConfigFilter。
如果项目已经集成druid,只需按要求配置即可。

1、执行命令加密数据库密码

找到druid-1.2.20.jar所在的文件夹目录,执行cmd命令,然后执行下面的命令生成数据库密码的密文和秘钥对。

java -cp druid-1.2.20.jar com.alibaba.druid.filter.config.ConfigTools 数据库密码

命令最后的参数一定要输入你的数据库密码,版本号视情况而定,我们这边使用的是druid-1.2.20版本。
命令输出的是加密后的结果,主要关注publicKey和password。

2、配置数据源

2.1、password属性修改成加密结果里的password值,即数据库密码的密文。
password: KWddMcILCrnt6GXmhct33cgL+paOLt7TE0c2DIzEhQi3/MP+2ke2LfbHfgpvccP2AUX8GgzCl4iMNF4o/yypQg==
2.2、启用过滤器configFilter
filter:
    config:
      # 启用过滤器configFilter,config下面只有enabled一个属性
      enabled: true      
2.3、配置config下面相关属性

config.decrypt为解密开关
config.decrypt.key为解密公钥

connection-properties: config.decrypt=true;config.decrypt.key=MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAKOAuSzGYufWFSDIpd3A5Mmv1UxAhcNT5hUCl8RLxtSXR+3H5r4T26OD+99VqPyF+EqwDJptmJZz4sDcK7fvANsCAwEAAQ==
2.3、启动应用程序测试验证加密结果

如若忘记密码可以使用工具类解密(传入生成的公钥+密码)

    public static void main(String[] args) throws Exception {
        String password = ConfigTools.decrypt(
                "MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAKOAuSzGYufWFSDIpd3A5Mmv1UxAhcNT5hUCl8RLxtSXR+3H5r4T26OD+99VqPyF+EqwDJptmJZz4sDcK7fvANsCAwEAAQ==",
                "KWddMcILCrnt6GXmhct33cgL+paOLt7TE0c2DIzEhQi3/MP+2ke2LfbHfgpvccP2AUX8GgzCl4iMNF4o/yypQg==");
        System.out.println("解密密码:" + password);
    }

3、多数据源情况下配置

需要配置的属性如下:

  • spring.datasource.dynamic.druid.public-key:数据库密文密码解密的公钥,如果使用了public-key,需要配置connection-properties属性(只要含有connection-properties属性即可,不必含有config.decrypt和config.decrypt.key配置,因为底层代码已经自动加上了)
  • spring.datasource.dynamic.datasource.master.password:数据库密码的密文

具体配置如下

posted @ 2023-12-31 21:30  右手一个柚  阅读(1004)  评论(1编辑  收藏  举报