博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
集成druid实现数据库密码加密功能
阅读量:3903 次
发布时间:2019-05-23

本文共 6257 字,大约阅读时间需要 20 分钟。

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

1、执行命令加密数据库密码(password替换为你的密码)

java -cp druid-1.2.4.jar com.alibaba.druid.filter.config.ConfigTools password

password 输入你的数据库密码,输出的是加密后的结果。

privateKey:MIIBVAIBADANBgkqhkiG9w0BAQEFAASCAT4wggE6AgEAAkEAuLMVAFmcew+mPfVnzI6utEvhHWO2s6e4R1bVW3a9IpH+pEypeNV6KtZ/w9PuysPfdPxW5fN3BmnKFZUAIMvWhQIDAQABAkA6rnsfr1juKFyzFsMx1KthETKmucWUctczoz0KYEFbN+joNsd/ApQqsS/2MVG1QWbDJLUsSLWkchvRbtiqOlVJAiEA6KmgVeLR2qUU9gv6DJfuWk4Ol1M9GJnTamgyDttsSGcCIQDLOdjcht29s954vApG1fiPTP/kMvZ5aLrccw1lEuEGMwIhAKoe3c3u++MTsi/2se9jaDU/vguIIbRLRfsYFQIoDxUhAiAnCm/cvZPvk5RTgVxAC276qIIoJpou7K2pF/kkx6Gu/QIgKUVFiM8GVZkOWZC+nUm3UIfpGjrKXjvGrlHNvt89uBA=publicKey:MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBALizFQBZnHsPpj31Z8yOrrRL4R1jtrOnuEdW1Vt2vSKR/qRMqXjVeirWf8PT7srD33T8VuXzdwZpyhWVACDL1oUCAwEAAQ==password:gkYlljNHKe0/4z7bbJxD7v/txWJIFbiGWwsIPo176Q7fG0UjcSizNxuRUI2ll27ZPQf2ekiHFptus2/Rc4cmvA==

2、配置数据源,提示Druid数据源需要对数据库密码进行解密。

# 数据源配置spring:    datasource:        type: com.alibaba.druid.pool.DruidDataSource        driverClassName: com.mysql.cj.jdbc.Driver        druid:            # 主库数据源            master:                url: jdbc:mysql://localhost:3306/ry?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8                username: root                password: gkYlljNHKe0/4z7bbJxD7v/txWJIFbiGWwsIPo176Q7fG0UjcSizNxuRUI2ll27ZPQf2ekiHFptus2/Rc4cmvA==            # 从库数据源            slave:                # 从数据源开关/默认关闭                enabled: false                url:                 username:                 password:             # 初始连接数            initialSize: 5            # 最小连接池数量            minIdle: 10            # 最大连接池数量            maxActive: 20            # 配置获取连接等待超时的时间            maxWait: 60000            # 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒            timeBetweenEvictionRunsMillis: 60000            # 配置一个连接在池中最小生存的时间,单位是毫秒            minEvictableIdleTimeMillis: 300000            # 配置一个连接在池中最大生存的时间,单位是毫秒            maxEvictableIdleTimeMillis: 900000            # 配置检测连接是否有效            validationQuery: SELECT 1 FROM DUAL            testWhileIdle: true            testOnBorrow: false            testOnReturn: false            connectProperties: config.decrypt=true;config.decrypt.key=MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBALizFQBZnHsPpj31Z8yOrrRL4R1jtrOnuEdW1Vt2vSKR/qRMqXjVeirWf8PT7srD33T8VuXzdwZpyhWVACDL1oUCAwEAAQ==            webStatFilter:                 enabled: true            statViewServlet:                enabled: true                # 设置白名单,不填则允许所有访问                allow:                url-pattern: /druid/*                # 控制台管理用户名和密码                login-username:                 login-password:             filter:                config:                    # 是否配置加密                    enabled: true                stat:                    enabled: true                    # 慢SQL记录                    log-slow-sql: true                    slow-sql-millis: 1000                    merge-sql: true                wall:                    config:                        multi-statement-allow: true

3、DruidProperties配置connectProperties属性

package com.chryl.config.properties;import org.springframework.beans.factory.annotation.Value;import org.springframework.context.annotation.Configuration;import com.alibaba.druid.pool.DruidDataSource;/** * druid 配置属性 *  * @author ruoyi */@Configurationpublic class DruidProperties{    @Value("${spring.datasource.druid.initialSize}")    private int initialSize;    @Value("${spring.datasource.druid.minIdle}")    private int minIdle;    @Value("${spring.datasource.druid.maxActive}")    private int maxActive;    @Value("${spring.datasource.druid.maxWait}")    private int maxWait;    @Value("${spring.datasource.druid.timeBetweenEvictionRunsMillis}")    private int timeBetweenEvictionRunsMillis;    @Value("${spring.datasource.druid.minEvictableIdleTimeMillis}")    private int minEvictableIdleTimeMillis;    @Value("${spring.datasource.druid.maxEvictableIdleTimeMillis}")    private int maxEvictableIdleTimeMillis;    @Value("${spring.datasource.druid.validationQuery}")    private String validationQuery;    @Value("${spring.datasource.druid.testWhileIdle}")    private boolean testWhileIdle;    @Value("${spring.datasource.druid.testOnBorrow}")    private boolean testOnBorrow;    @Value("${spring.datasource.druid.testOnReturn}")    private boolean testOnReturn;    @Value("${spring.datasource.druid.connectProperties}")    private String connectProperties;    public DruidDataSource dataSource(DruidDataSource datasource)    {        /** 配置初始化大小、最小、最大 */        datasource.setInitialSize(initialSize);        datasource.setMaxActive(maxActive);        datasource.setMinIdle(minIdle);        /** 配置获取连接等待超时的时间 */        datasource.setMaxWait(maxWait);        /** 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒 */        datasource.setTimeBetweenEvictionRunsMillis(timeBetweenEvictionRunsMillis);        /** 配置一个连接在池中最小、最大生存的时间,单位是毫秒 */        datasource.setMinEvictableIdleTimeMillis(minEvictableIdleTimeMillis);        datasource.setMaxEvictableIdleTimeMillis(maxEvictableIdleTimeMillis);        /**         * 用来检测连接是否有效的sql,要求是一个查询语句,常用select 'x'。如果validationQuery为null,testOnBorrow、testOnReturn、testWhileIdle都不会起作用。         */        datasource.setValidationQuery(validationQuery);        /** 建议配置为true,不影响性能,并且保证安全性。申请连接的时候检测,如果空闲时间大于timeBetweenEvictionRunsMillis,执行validationQuery检测连接是否有效。 */        datasource.setTestWhileIdle(testWhileIdle);        /** 申请连接时执行validationQuery检测连接是否有效,做了这个配置会降低性能。 */        datasource.setTestOnBorrow(testOnBorrow);        /** 归还连接时执行validationQuery检测连接是否有效,做了这个配置会降低性能。 */        datasource.setTestOnReturn(testOnReturn);        /** 为数据库密码提供加密功能 */        datasource.setConnectionProperties(connectProperties);        return datasource;    }}

4、启动应用程序测试验证加密结果

提示

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

public static void main(String[] args) throws Exception{	String password = ConfigTools.decrypt(			"MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBALizFQBZnHsPpj31Z8yOrrRL4R1jtrOnuEdW1Vt2vSKR/qRMqXjVeirWf8PT7srD33T8VuXzdwZpyhWVACDL1oUCAwEAAQ==",			"gkYlljNHKe0/4z7bbJxD7v/txWJIFbiGWwsIPo176Q7fG0UjcSizNxuRUI2ll27ZPQf2ekiHFptus2/Rc4cmvA==");	System.out.println("解密密码:" + password);}

 

转载地址:http://ayten.baihongyu.com/

你可能感兴趣的文章
跟益达学Solr5之增量索引MySQL数据库表数据
查看>>
跟益达学Solr5之批量索引JSON数据
查看>>
Comparison method violates its general contract
查看>>
CentOS安装Tomcat
查看>>
PHP开发环境搭建详细教程
查看>>
PHP第一天学习笔记
查看>>
OpenStack云平台的网络模式及其工作机制
查看>>
linux时区设置
查看>>
Windows 系统评估工具
查看>>
tasklist详解
查看>>
taskkill详解
查看>>
ovs-brcompatd is not running的解决办法
查看>>
zipimport.ZipImportError: bad local file header错误的解决办法
查看>>
Ubuntu下卸载mysql
查看>>
Intel 100芯片组如何安装Win7
查看>>
Ubuntu 16.04 LTS 一键安装VNC
查看>>
Linux中su命令与sudo命令
查看>>
题目1:二维数组中的查找
查看>>
anaconda conda 切换镜像源
查看>>
Python之面向对象
查看>>