日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
MySQL連接配置文件密碼加密及其在多種連接池上的應(yīng)用

為了安全,連接數(shù)據(jù)庫的配置文件中,如密碼等信息需要采用密文的形式存放。

10余年的雙河網(wǎng)站建設(shè)經(jīng)驗,針對設(shè)計、前端、開發(fā)、售后、文案、推廣等六對一服務(wù),響應(yīng)快,48小時及時工作處理。網(wǎng)絡(luò)營銷推廣的優(yōu)勢是能夠根據(jù)用戶設(shè)備顯示端的尺寸不同,自動調(diào)整雙河建站的顯示方式,使網(wǎng)站能夠適用不同顯示終端,在瀏覽器中調(diào)整網(wǎng)站的寬度,無論在任何一種瀏覽器上瀏覽網(wǎng)站,都能展現(xiàn)優(yōu)雅布局與設(shè)計,從而大程度地提升瀏覽體驗。創(chuàng)新互聯(lián)從事“雙河網(wǎng)站設(shè)計”,“雙河網(wǎng)站推廣”以來,每個客戶項目都認真落實執(zhí)行。

本文將給出多種連接池數(shù)據(jù)庫密碼密文存放的實現(xiàn)~

如何配置數(shù)據(jù)庫密碼加密訪問數(shù)據(jù)庫?

將配置文件用戶相關(guān)的信息(例如:密碼)進行加密使其以密文形式存在,進行初始化連接池的時候進行解密操作,達到成功創(chuàng)建連接池的目的。

接下來,我們完成如下幾個連接池采用數(shù)據(jù)庫密文存儲的實現(xiàn):

  •     DBCP連接池
  •     C3P0連接池
  •     Druid連接池

DBCP連接池

數(shù)據(jù)庫屬性文件database.properties

配置數(shù)據(jù)庫屬性文件, 配置數(shù)據(jù)庫連接的密碼(jdbc.password)設(shè)置為加密后的值,該值可以采用AES、DES、3DES等對稱加密方式實現(xiàn),也可以采用RSA的加密算法存儲~

 
 
 
 
  1. # jdbc.driverClassName 
  2. jdbc.driverClassName=com.mysql.jdbc.Driver 
  3.  
  4. # Database URL 
  5. jdbc.url=jdbc:mysql://127.0.0.1:3306/abc?useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull 
  6. jdbc.username=abc 
  7. jdbc.password=YpIADNvyi+/X2O33wS5E9SaEVKZgKuS70X8kgxgioEJ7+7KccS8aVmFIWndJ83NsUebDkb+w94HM3xCyjnjg4Q== 
  8.  
  9. # Time to wait for an open connection before timing out 
  10. # (in milliseconds) 
  11. cpool.checkoutTimeout=5000 
  12.  
  13. # Connection pool size 
  14. cpool.minPoolSize=10 
  15. cpool.maxPoolSize=50 
  16.  
  17. # How long to keep unused connections around(in seconds) 
  18. # Note: MySQL times out idle connections after 8 hours(28,800 seconds) 
  19. # so ensure this value is below MySQL idle timeout 
  20. cpool.maxIdleTime=25200 
  21.  
  22. # How long to hang on to excess unused connections after traffic spike 
  23. # (in seconds) 
  24. cpool.maxIdleTimeExcessConnections=1800 
  25.  
  26. # Acquiring new connections is slow, so eagerly retrieve extra connections 
  27. # when current pool size is reached 
  28. cpool.acquireIncrement=10 

自定義CustomDataSource

如果采用DBCP連接池,那么,我們可以采用自定義連接池,繼承org.apache.commons.dbcp.BasicDataSource,然后重寫setPassword(String password)方法即可~

 
 
 
 
  1. import org.apache.commons.codec.binary.Base64; 
  2.  
  3. /** 
  4.  * @Type CustomDataSource.java 
  5.  * @Desc  
  6.  * @author wangmengjun 
  7.  * @date 2017年12月12日 下午8:50:49 
  8.  * @version  
  9.  */ 
  10. public class CustomDataSource extends org.apache.commons.dbcp.BasicDataSource { 
  11.  
  12.     public CustomDataSource() { 
  13.         super(); 
  14.     } 
  15.  
  16.     @Override 
  17.     public void setPassword(String password) { 
  18.         try { 
  19.             String decodePassword =  new String(Base64.decodeBase64(password.getBytes())); 
  20.             this.password =decodePassword; 
  21.         } catch (Exception e) { 
  22.         } 
  23.     } 
  24.  

上述自定義DataSource示例中,采用Base64來完成簡單的加解密~

配置文件配置dataSource的地方,將org.apache.commons.dbcp.BasicDataSource改寫成自定義連接池類名即可(如:com.xxx.datasource.CustomDataSource)~

 
 
 
 
  1.         destroy-method="close"> 
  2.          
  3.          
  4.          
  5.          
  6.          
  7.          
  8.          
  9.          
  10.          
  11.          
  12.          
  13.          
  14.          
  15.          
  16.      

經(jīng)過上述幾個步驟,就可以采用密文配置數(shù)據(jù)庫密碼。

C3P0連接池

數(shù)據(jù)庫屬性文件database.properties

屬性配置文件內(nèi)容和上述DBCP連接池示例中的一致~

如果采用的C3P0連接池,那么,我們要做的是在配置com.mchange.v2.c3p0.ComboPooledDataSource的地方,增加properties屬性,編寫一個PropertiesFactory類,實現(xiàn)password的解密操作即可~

  • 編寫CustomDatasourcePropertiesFactory類
 
 
 
 
  1. import java.util.Properties; 
  2.  
  3. import org.apache.commons.codec.binary.Base64; 
  4. import org.slf4j.Logger; 
  5. import org.slf4j.LoggerFactory; 
  6.  
  7. /** 
  8.  * @Type CustomDatasourcePropertiesFactory.java 
  9.  * @Desc  
  10.  * @author wangmengjun 
  11.  * @date 2017年12月12日 下午9:11:06 
  12.  * @version  
  13.  */ 
  14. public class CustomDatasourcePropertiesFactory { 
  15.  
  16.     private static final String PASSWORD_PROPERTY = "password"; 
  17.  
  18.     private static final Logger logger = LoggerFactory 
  19.             .getLogger(CustomDatasourcePropertiesFactory.class); 
  20.  
  21.     public static Properties getProperties(String password) throws Exception { 
  22.         Properties properties = new Properties(); 
  23.         try { 
  24.             /** 
  25.              * 解密密碼 
  26.              */ 
  27.             String decodePassword = new String(Base64.decodeBase64(password.getBytes())); 
  28.             properties.setProperty(PASSWORD_PROPERTY, decodePassword); 
  29.         } catch (Exception e) { 
  30.             logger.error("CustomDatasourcePropertiesFactory#getProperties" + e.getMessage(), e); 
  31.         } 
  32.         return properties; 
  33.     } 

采用Base64來完成密碼密文解密。

  • 為ComboPooledDataSource配置名為properties的屬性
 
 
 
 
  1.  
  2.             
  3.                 factory-method="getProperties"> 
  4.                  
  5.                     ${jdbc.password} 
  6.                  
  7.              
  8.          

完整示例如下:

 
 
 
 
  1.  
  2.     
  3.         destroy-method="close"> 
  4.          
  5.             
  6.                 factory-method="getProperties"> 
  7.                  
  8.                     ${jdbc.password} 
  9.                  
  10.              
  11.          
  12.          
  13.          
  14.          
  15.          
  16.          
  17.          
  18.          
  19.          
  20.          
  21.          
  22.          
  23.          
  24.      

Druid連接池

數(shù)據(jù)庫連接屬性文件

 
 
 
 
  1. username=abc 
  2. password=YpIADNvyi+/X2O33wS5E9SaEVKZgKuS70X8kgxgioEJ7+7KccS8aVmFIWndJ83NsUebDkb+w94HM3xCyjnjg4Q== 
  3. url=jdbc:mysql://127.0.0.1:3306/InIot?useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull 
  4. driver=com.mysql.jdbc.Driver 
  5. initialSize=5 
  6. minIdle=5 
  7. maxActive=20 
  8. maxWait=60000 
  9. timeBetweenEvictionRunsMillis=60000 
  10. minEvictableIdleTimeMillis=30000 
  11. validationQuery=SELECT 1 
  12. testWhileIdle=true 
  13. testOnBorrow=true 
  14. testOnReturn=true 
  15. filters=stat,log4j 
  16. removeAbandoned=true 
  17. removeAbandonedTimeout=1200 
  18. logAbandoned=true 

實現(xiàn)密文密碼配置

在Druid連接池中密文采用RSA的方式進行,com.alibaba.druid.filter.config.ConfigTools工具類提供了RSA的加解密功能,經(jīng)過如下2個步驟,能成密文密碼配置的功能~

  • 產(chǎn)生一個密文

采用com.alibaba.druid.filter.config.ConfigTools完成RSA的加解密功能

ConfigTools的部分代碼如下:

 
 
 
 
  1. public class ConfigTools { 
  2.  
  3.     private static final String DEFAULT_PRIVATE_KEY_STRING = "MIIBVAIBADANBgkqhkiG9w0BAQEFAASCAT4wggE6AgEAAkEAocbCrurZGbC5GArEHKlAfDSZi7gFBnd4yxOt0rwTqKBFzGyhtQLu5PRKjEiOXVa95aeIIBJ6OhC2f8FjqFUpawIDAQABAkAPejKaBYHrwUqUEEOe8lpnB6lBAsQIUFnQI/vXU4MV+MhIzW0BLVZCiarIQqUXeOhThVWXKFt8GxCykrrUsQ6BAiEA4vMVxEHBovz1di3aozzFvSMdsjTcYRRo82hS5Ru2/OECIQC2fAPoXixVTVY7bNMeuxCP4954ZkXp7fEPDINCjcQDywIgcc8XLkkPcs3Jxk7uYofaXaPbg39wuJpEmzPIxi3k0OECIGubmdpOnin3HuCP/bbjbJLNNoUdGiEmFL5hDI4UdwAdAiEAtcAwbm08bKN7pwwvyqaCBC//VnEWaq39DCzxr+Z2EIk="; 
  4.     public static final String DEFAULT_PUBLIC_KEY_STRING = "MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAKHGwq7q2RmwuRgKxBypQHw0mYu4BQZ3eMsTrdK8E6igRcxsobUC7uT0SoxIjl1WveWniCASejoQtn/BY6hVKWsCAwEAAQ=="; 
  5.  
  6.     public static void main(String[] args) throws Exception { 
  7.         String password = args[0]; 
  8.         String[] arr = genKeyPair(512); 
  9.         System.out.println("privateKey:" + arr[0]); 
  10.         System.out.println("publicKey:" + arr[1]); 
  11.         System.out.println("password:" + encrypt(arr[0], password)); 
  12.     } 
  13.  
  14.     public static String decrypt(String cipherText) throws Exception { 
  15.         return decrypt((String) null, cipherText); 
  16.     } 
  17.  
  18.     public static String decrypt(String publicKeyText, String cipherText) 
  19.             throws Exception { 
  20.         PublicKey publicKey = getPublicKey(publicKeyText); 
  21.  
  22.         return decrypt(publicKey, cipherText); 
  23.     } 
  24.  
  25. ... ...  
  26.  

測試一下:

 
 
 
 
  1. import com.alibaba.druid.filter.config.ConfigTools; 
  2.  
  3. /** 
  4.  * @Type ConfigToolsTest.java 
  5.  * @Desc  
  6.  * @author wangmengjun 
  7.  * @date 2017年12月12日 下午1:09:38 
  8.  * @version  
  9.  */ 
  10. public class ConfigToolsTest { 
  11.  
  12.     public static void main(String[] args) throws Exception { 
  13.        String password = "abc123123"; 
  14.        String encodePassword =  ConfigTools.encrypt(password); 
  15.        System.out.println("明文密碼: " + encodePassword); 
  16.        System.out.println("密文密碼: " + ConfigTools.decrypt(encodePassword)); 
  17.     } 

輸出:

 
 
 
 
  1. 明文密碼: TcrvCxmsd2588abZpfT8DE4C1GO3rbt6S99arh1yWJC/pGjhN3vzGN182j65Ei65M00PjR+uvMC/hN12t4CxHg== 
  2.  
  3. 密文密碼: abc123123 

另外,也可以采用命令,獲取RSA公鑰、密鑰和密碼~

 
 
 
 
  1. java -cp druid-1.0.31.jar com.alibaba.druid.filter.config.ConfigTools you_password 

如:

 
 
 
 
  1. F:\>java -cp druid-1.0.31.jar com.alibaba.druid.filter.config.ConfigTools abc123123 
  2.  
  3. privateKey:MIIBVAIBADANBgkqhkiG9w0BAQEFAASCAT4wggE6AgEAAkEAzvPye2JYkSLqekOHPjNWdxYsfXP2XXAsJYR2Z1zukYlchouhvYvQhNrA9r7vxtvCFZKpWbAMC7YfKM4vvyz5DwIDAQABAkAgwlDR4yFt5/8B14qi9/Fp7GKigSawZ781OSCdAALrmm+9WrPsck9klZegUnUc5ewnjC3mBoqqd5aTrRH0EZtRAiEA9RfJ4yOjTEQtl2GXUWy2uP1evxyp8hbOxPYj1TDZDasCIQDYKaZrjySu7AJ9leScDGLmUBzhWX2FeXZ0IIMHEeq2LQIhAJA6TX2yrRfmTwX0Uf2CggxeXXENRxzFOyxAxFlig3g9AiAhuAWEu7R+MMSGsI4TpX777D1FDb+dxX+rx7KItMvHFQIgaHGt2T/Qw+qJ9+GIi9/qQkUhKUK59vDYFB5j0mmkJRc= 
  4.  
  5. publicKey:MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAM7z8ntiWJEi6npDhz4zVncWLH1z9l1wLCWEdmdc7pGJXIaLob2L0ITawPa+78bbwhWSqVmwDAu2HyjOL78s+Q8CAwEAAQ== 
  6.  
  7. password:zctG01uijEcWQ34N9ishfOkuQtMBucDApSeD+Jrg9qOitMavrrErhrQFeBkdlf4KI7b8YCUn2O6TWa6Z6fVQQg== 
  8. F:\>
  • 配置connectionProperties屬性
 
 
 
 
  1.  
  2.          
  3.          

詳細的數(shù)據(jù)源配置如下:

 
 
 
 
  1.  
  2.          
  3.          
  4.          
  5.          
  6.          
  7.          
  8.          
  9.          
  10.          
  11.          
  12.          
  13.          
  14.          
  15.          
  16.          
  17.          
  18.          
  19.          
  20.          
  21.          
  22.          
  23.          
  24.          
  25.          
  26.          
  27.          
  28.          
  29.          
  30.          
  31.          
  32.          
  33.      

可以從Druid官網(wǎng)獲取更多的信息。

【官網(wǎng)】https://github.com/alibaba/druid/wiki/使用ConfigFilter

至此,三種數(shù)據(jù)庫連接池,包括DBCP、C3P0以及Druid的密碼配置就完成了~

回顧一下:

如何配置數(shù)據(jù)庫密碼加密訪問數(shù)據(jù)庫 ?

將配置文件用戶相關(guān)的信息(例如:密碼)進行加密使其以密文形式存在,進行初始化連接池的時候進行解密操作,達到成功創(chuàng)建連接池的目的。


文章題目:MySQL連接配置文件密碼加密及其在多種連接池上的應(yīng)用
新聞來源:http://www.dlmjj.cn/article/djgjgjs.html