druid 数据库密码加密
使用Druid连接池实现数据库密码加密保护的方法:首先确定Druid版本,定位jar包位置后执行加密命令获取加密密码、公钥和私钥。然后在项目配置中使用加密密码,并在DataSource初始化时激活ConfigFilter进行解密。该方法可以有效规避密码泄露风险,但仍需注意公钥和私钥的保管问题,建议后续可引入Nacos进行更安全的密钥管理。文章详细演示了从加密到配置的完整流程,适用于使用Druid连
背景
规避数据库账号密码泄露风险, 项目中使用druid管理数据库,该连接池支持密码加密, 那么下面演示下加密的过程。
加密过程
确定项目使用druid版本
- 定位druid使用的版本, 图中显示版本是1.2.23
定位 com.alibaba.druid包在maven资源库的位置
我的maven资源库目录是D:\software\maven\repository, 那么druid包的全路径自然是D:\software\maven\repository\com\alibaba\druid\1.2.23
加密密码
- 执行加密
java -cp druid-1.2.23.jar com.alibaba.druid.filter.config.ConfigTools 换成你的密码
- 比如:密码是 Data_compass_123, 执行下面的命令将得到 加密后的密码,公钥,私钥
java -cp druid-1.2.23.jar com.alibaba.druid.filter.config.ConfigTools yourdatasoucepassswrod > yourdatasoucepassswrod_加密后的文档.txt
项目druid配置
- 配置加密后的密码
- 配置公钥
spring.datasource.druid.masterConnectProperties=config.decrypt=true;config.decrypt.key=上一步获取的publicKey
- DataSouce加密配置
数据罗盘项目是通过AbstractRoutingDataSource抽象类管理多数据源的项目, 所以需要在各个DataSouce被初始化的时候,进行激活ConfigFilter过滤器,进行解密
@Value("${spring.datasource.druid.masterConnectProperties}")
private String connectProperties;
@Bean
@ConfigurationProperties("spring.datasource.druid.master")
public DataSource masterDataSource(DruidProperties druidProperties) {
DruidDataSource dataSource = DruidDataSourceBuilder.create().build();
// 1.0 设置开启加密,加密的公钥的连接属性
dataSource.setConnectionProperties(connectProperties);
try {
// 开启ConfigFilter,负责解密
dataSource.setFilters("config");
} catch (SQLException throwables) {
throwables.printStackTrace();
}
return druidProperties.dataSource(dataSource);
}
- 启动成功,业务则胡南广场
总结
可以通过这个方式解密出密码ConfigTools.decrypt(String publicKeyText, String cipherText) , 这两个信息都暴漏在配置文件中, 后面可以引入nacos,公钥放入nacos。
如果是使用dynamic-datasource-spring-boot-starter项目的处理原理和这个项目类似,具体配置待补充。

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐
所有评论(0)