使用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/49930513

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

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

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

舉個栗子:

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

輸出的結果就是加密后的密碼啦!xxxxxx為你的數據庫密碼明文。

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

 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進行數據庫密碼解密。 

經過簡單的配置,這樣配置文件里面的密碼加密之后,有可以連接到數據庫啦!

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

ConfigFilter不僅僅可以進行數據庫加密,還可以支持配置文件從本地文件系統中讀取,從遠程http文件中讀取配置操作,大家可以試試看!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM