有關數據庫連接安全性的考慮

 最近客戶在安裝某款國內著名ERP管理軟件時,我在現場指導過程發現了一個有意思的問題,雖然該軟件是由具有數十年經驗,並佔有財務軟件絕對市場控制權的企業開發的,但是從其安裝過程看,還是有很多漏洞的。

  其系統安裝時需要MS SQLSERVER的SA帳號進行配置,廠商的安裝人員想都沒想就配置了個空SA密碼,經提醒後倒是設了個密碼,不過設置完後發現已經在客戶端安裝的軟件都沒法用了,又無奈改回了空SA密碼...

 

  從其安裝過程看,作爲C/S架構的軟件,其最起碼有如下問題:

  1. 這種現象說明其在安裝過程中沒有創建數據庫專用管理賬戶,而是使用了數據庫服務器的最高管理員賬戶。如果數據庫服務器存在多個軟件系統的數據庫,只要破解了連接帳號,就可以通吃了。

  2. 該軟件客戶端的數據庫連接字符串應該時記錄在客戶端的,早期的版本據說配置文件連加密都沒做,直接將sa密碼敞開口供應。此種做法一方面不安全,另一方面一旦DB管理員修改了SA密碼,所有客戶機都將無法連接。

 

  其實,改變這種問題的方法很簡單,開發難度也不大,只要做好兩件事即可:

  1. 安裝過程中的數據庫配置處理

   服務器端安裝過程中,很容易做到僅使用一次數據庫服務器管理員密碼,創建號數據庫後,自動爲數據庫設置專用的操作賬戶,並自動生成賬戶密碼,記錄在配置文件中,這樣做就可以由軟件系統負責數據庫連接帳號的安全管理(爲了提高安全性,所創建的帳號應禁用帳號的登錄功能)。

 

  2. 客戶端的數據庫連接字符串獲取處理

    C/S模式的SQL數據庫連接必須配置數據庫連接字符串,而該字符串包含了數據庫名,帳號及密碼,目前的做法主要有如下幾種:

   1)直接明碼的方式寫入客戶端配置文件中,安全性就不說它了。

   2)使用SSPI集成認證方式,但對於此方式,客戶端自動就具有數據庫的操作權,可以在不使用軟件情況下直接對數據庫操作。因此是不安全的。

   3)使用加密的配置文件,雖然具有一定的安全性,但一旦數據庫密碼發生改變,所有客戶端仍然不能登錄。

  

   由於以上三種做法都存在問題,因此我們的做法如下:

   - 數據庫連接字符串的配置文件只存在於服務器中,而不存在於客戶端中。

   - 服務器開闢專用的認證端口用於接收客戶機的認證請求,端口通信可以配置諸多加密手段保護。

   - 客戶端通過認證後,服務器使用加密通道將數據庫連接字符串發送給客戶端

   - 客戶端的數據庫連接字符串保存在內存中,而不是在配置文件中,可以保證一定程度的安全。

   - 一旦發現密碼泄露,只需要調整服務器端配置文件即可,不用改變客戶機的配置。

 

  可見,採用端口通信的方式設置客戶端的數據庫連接字符串更加安全,也更易於管理。

 

 

   當然,要想進一步提高數據庫的安全性,防止通過內存分析的方式獲取連接字符串,還可以設置動態連接的方式處理,比如服務器控制每個連接使用不同的帳號,並根據需求動態的改變帳號密碼。

發佈了34 篇原創文章 · 獲贊 8 · 訪問量 9萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章