c3p0,druid,springboot項目使用數據庫配置文件加密訪問

數據庫加密訪問

原理

將配置文件中的密碼進行加密使其以密文方式存在,在初始化鏈接池時進行解密操做,達到成功建立鏈接池的目的。java

目前主要使用的鏈接池有如下幾個:mysql

  • c3p0
  • druid
  • springboot框架的鏈接池

C3P0鏈接池

  1. jdbc.properties中密碼由明文改爲密文
  2. 在配置com.mchange.v2.c3p0.ComboPooledDataSource的地方 ,增長properties屬性,編寫一個PropertiesFactory類,實現password的解密操做便可。
  • 編寫DatasourcePropertiesFactory類git

    public class DatasourcePropertiesFactory { 
    
        private static final String PASSWORD_PROPERTY = "password"; 
        public static Properties getProperties(String password) throws Exception { 
            Properties properties = new Properties(); 
            try { 
                /** 
                 * 這裏對參數password進行解密獲得解密後的密碼
                 */ 
                String decodePassword = 解密(password) 
                properties.setProperty(PASSWORD_PROPERTY, decodePassword); 
            } catch (Exception e) { 
           		//處理異常
            } 
            return properties; 
        } 
    }
  • 修改spring.xml中數據源datasource的配置,爲ComboPooledDataSource配置名爲properties的屬性,同時取消password的property配置項github

    <property name="properties"> 
                <bean class="com.xxx.datasource.CustomDatasourcePropertiesFactory" 
                    factory-method="getProperties"> 
                    <constructor-arg type="java.lang.String"> 
                        <value>${jdbc.password}</value> 
                    </constructor-arg> 
                </bean> 
    </property>

Druid鏈接池

  • druid鏈接池默認使用RSA加密鏈接,修改解密算法比較麻煩,建議直接使用druid提供的工具進行加解密算法

    1. cmd控制檯使用如下命令獲取公私鑰、加密密文
    java -cp druid-1.0.31.jar com.alibaba.druid.filter.config.ConfigTools your_password
    1. 修改jdbc.properties中密碼改爲上面控制檯中獲取到的加密密碼,注意不要複製成公私鑰,若是有配置testOnReturn 和testOnBorrow 的必定要設置成true
    2. 修改spring.xml中com.alibaba.druid.pool.DruidDataSource 的配置,增長如下配置
    <!-- config.decrypt=true --> 
    <property name="filters" value="config" /> 
    <property name="connectionProperties" value="config.decrypt=true" />

    能夠參考官網信息【官網】https://github.com/alibaba/druid/wiki/使用ConfigFilterspring

springboot框架

springboot引入jasypt進行加解密操做,默認加密算法是PBEWithMD5AndDES,一種結合PBE,MD5和DES的複合加密算法sql

  1. maven引入jasypt依賴
<dependency>
	<groupId>com.github.ulisesbocchio</groupId>
	<artifactId>jasypt-spring-boot-starter</artifactId>
	<version>2.1.0</version>
</dependency>
  1. 配置加密密鑰
jasypt:
  encryptor:
    password: 123456這個密鑰由運維提供
  1. 編寫測試用例獲取加密密碼(也能夠在控制檯使用java命令獲取)
@Autowired
    StringEncryptor stringEncryptor;

    @Test
    public void encryptPwd() {
        String result = stringEncryptor.encrypt("yourpassword");
        System.out.println(result); 
    }
  1. 修改配置文件application.yml中password項,用ENC()括起來
spring:
  datasource:
    url: jdbc:mysql://192.168.171.231:3306/eoc?characterEncoding=utf8&useUnicode=true
    username: test
    password: ENC(括號裏面填上面獲取到的加密密文)
相關文章
相關標籤/搜索