1.問題所在數據庫
不少的時候,咱們會對數據庫的密碼進行加密,由於爲了安全性。若是使用阿里巴巴的Druid的數據源,可使用阿里巴巴的加密技術,同時每次生成的private和public鑰,是不相同的,因此能夠確保密碼的安全性。可是仍然有不少項目使用c3p0數據源,這樣的話就會帶來問題。固然使用一個數據庫的時候也許不會出現,可是使用多個數據源的時候就會出現這樣的問題:假設數據庫的user爲:testUser。那麼進行數據庫切換的時候,就會出現testUser登入失敗的問題,不知道你們有沒有遇到。由於咱們項目是使用mybatis,因此以mybatis爲例進行講解。在切換數據庫的時候,運行程序時候,控制檯出現test對象名不存在錯誤。一開始我覺得是xml配置的問題,由於是自動生成的,而後本身手寫了一邊xml,最後仍是這個報錯。而後本身寫了一個測試案例,發現原來是數據庫切換的問題,並無切換到另一個數據庫。而後開始找錯誤,從新去配置。最後仍是沒有解決。安全
2.問題分析mybatis
2.1從配置文件入手測試
進行bug模式,發現配置文件的密碼是能夠傳輸過來的,也能夠進行解密。那就是否是進行解密的時候出現的問題。ui
2.2從數據庫入手加密
由於是出現的testUser登入失敗的問題,而後開始懷疑是數據庫受權的問題。由於通常針對不一樣的數據庫會賦予不一樣的權限。一開始也確實是解決了這個問題,而後給每一個數據庫賦予給這個用戶。可是進行切換數據的時候,仍是出現登入失敗的問題。也就是說能夠進數據源,代表連接多數據源是能夠的,這是沒有問題的。就是登入鏈接的時候失敗了。也就是password出現問題。到頭來仍是解密的時候,失敗了。code
3.問題的解決xml
發現了問題所在之處就好解決了,首先找出加密的時候配置文件:對象
<property name="encryptedProps"> <set> <value>password</value> </set> </property>
上面那個很重要,由於配置的是多password進行加密。有由於你連接的是多個數據源,因此確定會配置多個password。可是請注意<set>也就是說能夠配置多個,上面的那個問題是隻配置了一個password也就是說,其它的數據源password1,password2沒法進行解密。這個就是致使user沒法登入的最終緣由。class
解決一:<set>增長加密元素。
解決二:配置文件中所有統一使用一個密碼就是password。