使用durid的ConfigFilter對數據庫密碼加密

 1 <!-- 配置dbcp數據源 -->
 2     <bean id="remoteDS" class="org.apache.commons.dbcp.BasicDataSource"
 3         destroy-method="close">
 4         <!-- 使用的JDBC驅動的完整有效的java 類名 -->
 5         <property name="driverClassName" value="${remote.jdbc.driver}" />
 6         <!-- 傳遞給JDBC驅動的用於創建鏈接的URL -->
 7         <property name="url" value="${remote.jdbc.url}" />
 8         <!-- 數據庫用戶名 -->
 9         <property name="username" value="${remote.jdbc.username}" />
10         <!-- 用戶密碼 -->
11         <property name="password" value="${remote.jdbc.password}" />
12         <!-- 指明是否在從池中取出鏈接前進行檢驗,若是檢驗失敗,則從池中去除鏈接並嘗試取出另外一個. -->
13         <property name="testOnBorrow" value="${dbcp.testOnBorrow}" />
14         <!-- 指明是否在歸還到池中前進行檢驗 -->
15         <property name="testOnReturn" value="${dbcp.testOnReturn}" />
16         <!-- 指明鏈接是否被空閒鏈接回收器(若是有)進行檢驗.若是檢測失敗,則鏈接將被從池中去除. -->
17         <property name="testWhileIdle" value="${dbcp.testWhileIdle}" />
18         <!-- SQL查詢,用來驗證從鏈接池取出的鏈接,在將鏈接返回給調用者以前.若是指定,
19                 則查詢必須是一個SQL SELECT而且必須返回至少一行記錄 -->
20         <property name="validationQuery" value="${dbcp.validationQuery}" />
21         <!-- 鏈接池建立的鏈接的默認的auto-commit狀態 -->
22         <property name="defaultAutoCommit" value="${dbcp.defaultAutoCommit}" />
23         <!-- 最大空閒鏈接 -->
24         <property name="maxIdle" value="${dbcp.maxIdle}" />
25         <!-- 最大鏈接數量 -->
26         <property name="maxActive" value="${dbcp.maxActive}" />
27         <!-- 鏈接在池中保持空閒而不被空閒鏈接回收器線程(若是有)回收的最小時間值,單位毫秒 -->
28         <property name="minEvictableIdleTimeMillis" value="${dbcp.minEvictableIdleTimeMillis}" />
29         <!-- 在空閒鏈接回收器線程運行期間休眠的時間值,以毫秒爲單位. 若是設置爲非正數,則不運行空閒鏈接回收器線程 -->
30         <property name="timeBetweenEvictionRunsMillis" value="${dbcp.timeBetweenEvictionRunsMillis}" />
31      <property name="connectionProperties" value="config.decrypt=true;config.decrypt.key=${db.publicKey}"/>
32     </bean>

 

注:轉自https://blog.csdn.net/aixiaoyang168/article/details/49930513java

對於大部分程序員來講,數據庫的信息,如用戶名,密碼等信息通常都寫到配置文件中,便於修改和維護,然而這對於運維安全來講確實一個很大的挑戰,若是黑客進入到你的系統裏面去,那這些數據庫用戶名和密碼就一目瞭然,這個是很不安全的。Druid爲此提供一種數據庫密碼加密的手段ConfigFilter,使用他加密數據庫密碼,即便別人拿到了數據庫鏈接密碼,破解這個密碼也得稍稍花點時間了,也對我們的網站安全性提升了一些。程序員

好了,廢話少說,配置一下也是很簡單的啦!數據庫

第一步: 
執行druid的命令加密數據庫密碼 
命令: 
java -cp druid-0.2.23.jar com.alibaba.druid.filter.config.ConfigTools xxxxxxapache

舉個栗子:安全

命令:
D:\>java -cp druid-1.0.15.jar com.alibaba.druid.filter.config.ConfigTools 123456
輸出:
Biyu5YzU+6sxDRbmWEa3B2uUcImzDo0BuXjTlL505+/pTb+/0Oqd3ou1R6J8+9Fy3CYrM18nBDqf6wAaPgUGOg==

輸出的結果就是加密後的密碼啦!xxxxxx爲你的數據庫密碼明文。運維

第二步: 
配置數據源,使用Druid配置數據源對數據庫密碼進行解密。jvm

 1 <!-- 配置dbcp數據源 -->
 2     <bean id="remoteDS" class="org.apache.commons.dbcp.BasicDataSource"
 3         destroy-method="close">
 4         <!-- 使用的JDBC驅動的完整有效的java 類名 -->
 5         <property name="driverClassName" value="${remote.jdbc.driver}" />
 6         <!-- 傳遞給JDBC驅動的用於創建鏈接的URL -->
 7         <property name="url" value="${remote.jdbc.url}" />
 8         <!-- 數據庫用戶名 -->
 9         <property name="username" value="${remote.jdbc.username}" />
10         <!-- 用戶密碼 -->
11         <property name="password" value="${remote.jdbc.password}" />
12         <!-- 指明是否在從池中取出鏈接前進行檢驗,若是檢驗失敗,則從池中去除鏈接並嘗試取出另外一個. -->
13         <property name="testOnBorrow" value="${dbcp.testOnBorrow}" />
14         <!-- 指明是否在歸還到池中前進行檢驗 -->
15         <property name="testOnReturn" value="${dbcp.testOnReturn}" />
16         <!-- 指明鏈接是否被空閒鏈接回收器(若是有)進行檢驗.若是檢測失敗,則鏈接將被從池中去除. -->
17         <property name="testWhileIdle" value="${dbcp.testWhileIdle}" />
18         <!-- SQL查詢,用來驗證從鏈接池取出的鏈接,在將鏈接返回給調用者以前.若是指定, 則查詢必須是一個SQL SELECT而且必須返回至少一行記錄 -->
20         <property name="validationQuery" value="${dbcp.validationQuery}" />
21         <!-- 鏈接池建立的鏈接的默認的auto-commit狀態 -->
22         <property name="defaultAutoCommit" value="${dbcp.defaultAutoCommit}" />
23         <!-- 最大空閒鏈接 -->
24         <property name="maxIdle" value="${dbcp.maxIdle}" />
25         <!-- 最大鏈接數量 -->
26         <property name="maxActive" value="${dbcp.maxActive}" />
27         <!-- 鏈接在池中保持空閒而不被空閒鏈接回收器線程(若是有)回收的最小時間值,單位毫秒 -->
28         <property name="minEvictableIdleTimeMillis" value="${dbcp.minEvictableIdleTimeMillis}" />
29         <!-- 在空閒鏈接回收器線程運行期間休眠的時間值,以毫秒爲單位. 若是設置爲非正數,則不運行空閒鏈接回收器線程 -->
30         <property name="timeBetweenEvictionRunsMillis" value="${dbcp.timeBetweenEvictionRunsMillis}" />
31      <property name="connectionProperties" value="config.decrypt=true;config.decrypt.key=${db.publicKey}"/>
32     </bean>

 

說明:name=」connectionProperties」 value=」config.decrypt=true」,這個就是配置druid進行數據庫密碼解密。 網站

通過簡單的配置,這樣配置文件裏面的密碼加密以後,有能夠鏈接到數據庫啦!ui

固然,使用ConfigFilter解密密碼,有三種方式配置: 
1) 能夠在配置文件my.properties中指定config.decrypt=true 
2) 也能夠在DruidDataSource的ConnectionProperties中指定config.decrypt=true 
3) 也能夠在jvm啓動參數中指定-Ddruid.config.decrypt=true加密

ConfigFilter不單單能夠進行數據庫加密,還能夠支持配置文件從本地文件系統中讀取,從遠程http文件中讀取配置操做,你們能夠試試看!

相關文章
相關標籤/搜索