CIO
|
PCDIY!
|
旗標圖書
|
旗景數位影像
|
讀者服務
首 頁
即時新聞
業界動態
最新活動
企業採購
精選文章
線上教學
品牌活動
程式碼下載
雲端運算智庫
最近新增的
精選文章
AP內建AI引擎 Mist Cloud平台分析能力強 Juniper Mist AI領先全球 改善WiFi穩定、效能首選
解決IT供應鏈攻擊
內部威脅的七個警訊
遠百以專案辦公室推動數位體驗
多廠牌與多重電信業者網路架構的挑戰與機會
德明科大啟用電貿暨AI實習基地 ViewSonic ViewBoard 智慧互動電子白板 扮要角
淺談計算誤差
秀傳醫療體系統 以Lenovo HyperConverged HX 超融合架構扎穩智慧醫療發展基礎
模組化設計 偵測率達99.99% 全面防杜惡意郵件入侵 首選Cellopoint Email UTM
滿足網路管理與檔案安全傳輸需求,Ipswitch的MOVEit及WhatsUp Gold一次完整提供
來自學界的資料分析利器 - Weka 與 R
北醫建置肺癌資料庫,透過深度標註訓練AI,協助醫師早期發現癌症
北榮AI門診上路!人工智慧判讀腦瘤,有效縮短醫師確診時間
台灣智慧機器人玩具聯盟攜手英閱音躍研創 推廣T. Robot程式教育,協助國中小學扎根培養運算思維
一場與時間賽跑的戰役 ,人工智慧加速心血管疾病診斷
最多人點閱的
精選文章
免費IT建置--Linux系統操作與管理
初探Hadoop開放原始碼平台環境
免費IT建置--網頁伺服器的完美組合LAMP(下)
免費IT建置--檔案共享與檔案伺服器
Linux下的防火牆(基礎篇)
Linux下的防火牆(進階篇)
N.Y.BAGELS CAFE善用SAP Business One
手機程式設計入門與應用 Android、iPhone、Windows Mobile─ 影片播放器範例
手機程式設計入門與應用 Android、iPhone、Windows Mobile─ 線上查詢匯率
手機程式設計入門與應用 Android、iPhone、Windows Mobile─ 擲骰子遊戲
手機程式設計入門與應用 Android、iPhone、Windows Mobile─ 音樂播放器範例
手機程式設計入門與應用 Android、iPhone、Windows Mobile─ 來電黑名單
免費IT建置--網頁伺服器的完美組合LAMP(上)
手機程式設計入門與應用 Android、iPhone、Windows Mobile─ 繪圖板範例
手機程式設計入門與應用 Android、iPhone、Windows Mobile─ Matrix應用範例
精選文章 - 開發技術
分享到Plurk
分享到FaceBook
Microsoft SQL Server欄位字串加密應用
簡單為資訊系統加入安全機制
文/圖 林柏甫.責任編輯/洪羿漣
大多數的人都有一個疑問:為什麼資料庫中的密碼欄位一定要加密,反正密碼都是存在資料庫中,只要程式寫的安全,一般人也無法透過程式的漏洞來取得密碼,幹嘛那麼麻煩?其實在資安環節之中,這可是一個非常嚴重的問題。
應用程式與系統不可能百分之百的安全。哪一天真的被入侵了,整個資料就攤在Cracker眼前任憑處置。以線上遊戲來說,Cracker取得帳號與密碼後,可以隨意的先取用一組帳號密碼登入遊戲,再觀察哪個ID等級最高、金錢最多、寶物最好等等。等獵物下線後,將該ID名貴的寶物以及其相關物品都轉到另外一個帳號,並將虛擬寶物賣掉。
以上是一個虛構的例子,但並不是使用鍵盤側錄器或是木馬來竊取帳號密碼,而是帳號密碼資訊經由入侵系統漏洞,並進行操作取得。如果今天密碼欄位沒有加密,就好像是把大筆金額放到沒有功能的保險箱一樣,誰打開誰就能取走。
帳號密碼被竊
曾經看過很多早期設計的系統密碼欄位都還是明碼,說真的,每次看每次都會覺得可怕。總經理與其他主管輸入密碼的時候都非常小心,但有什麼用呢?也許其他員工無法取得其資料庫的內容,甚至連接觸都沒辦法,但資安中最弱的環節並非設定方法、防火牆或政策,而是「人」。
如果管理資料庫的人本身品德不佳,管理人員便可以輕易的進入資料庫管理介面內開啟資料表,輕鬆的複製貼上將密碼偷走。除了企業內部資訊會外洩,甚至如竊取會計的帳號密碼,可以看到每個人的薪資資料以及公司的總帳;竊取研發經理的帳號則可能導致公司的研究成果流出等等狀況。(圖1)
圖1:未經加密的密碼無論使用再怎麼長的強式密碼都是枉然。
經由上述的案例來看,密碼欄位的加密是否就顯得格外重要了呢?下面筆者會說明如何簡單的使用微軟SQL 2005內建的功能,快速的將密碼欄位進行加密。
字串加密函式:HashBytes
HashBytes提供的加密法有幾種,分別為MD2、MD4、MD5、SHA、SHA1,目前最常被使用的是MD5與SHA1。整個使用過程很簡單,只是有一些小細節要注意即可順利達成。首先,先測試HashBytes運作是否合乎需求,這裡先開啟SQL Server Management Studio(SSMS),隨意建立一個測試用的資料庫之後,點選建立好的資料庫,並按下左上角的[新增查詢],再將以下T-SQL語法輸入到查詢視窗中:
---測試 Hashbytes 函式是否有作用
Select hashbytes('MD5','12345') as MD5,
hashbytes('SHA1','12345') as SHA1;
查詢會產生的結果如表1。這樣看來將字串「12345」的加密是已經成功了,也可確定HashBytes函式運作無誤,接下來就可以進行實際導入前的測試。
表1:使用HashBytes 函式對字串「12345」以MD5與SHA1加密的結果
HashBytes應用測試過程
在正式將密碼欄位加密之前,為了慎重起見,讓我們來模擬密碼欄位加密的流程。首先建立一張名稱為[HashTest]的新資料表,欄位設定如表2。我們也可以用以下T-SQL語法快速的建立該資料表:
表2:測試資料表所需欄位型態與說明
資料表建立好後,即可開始進行測試。請在PassWD欄位中隨意輸入一些字串,HashedPW保持空白,因為它是預備用的欄位,也就是接下來要看加密結果是否正確的一個指標。
筆者在這裡輸入的測試資料如表3所示。接下來將需要經由SHA1加密過的密碼字串更新到HashedPW:
--- 將PassWD加密後的值更新至 hashedPW
Update hashtest set hashedPW = HashBytes('SHA1', PassWD)
表3:資料表測試用之資料
HashBytes函式執行結果如表4的亂碼,相信到這裡很多人會想問為什麼跟剛開始的測試結果不一樣呢?
表4:HashedPW加密後的欄位值
根據MSDN上記載,HashBytes函數的回傳值型態為「varbinary」而不是「字串」形態,所以這裡要再使用「sys.fn_VarBinToHexStr()」進行轉換的動作,才可顯示正確的加密字串:
-- 以sys.fn_VarBinToHexStr()轉換成文字
update hashtest set hashedPW = sys.fn_VarBinToHexStr(HashBytes('SHA1', PassWD));
輸出的結果如表5,密碼欄位加密已經正確的完成,接下來還可以用更進階的設置讓我們使用起來更方便。
表5:完整的加密示意圖
加密函式進階應用
文章至此也許會有人會問,能不能讓SQL 2005或2008的加密使用起來跟MySQL一樣,直接用「md5(‘字串’)」或是「sha1(‘字串’)」就可以?免去記憶「sys.fn_VarBinToHexStr()」與「HashBytes()」函式用法的困擾。
其實字串加密函式過程是很固定的,這裡就可以利用Create Function來將上述的過程封裝起來,並且讓使用方法就跟MySQL的加密函式一樣的簡易使用。
封裝MD5加密:Select dbo.MD5('字串' | 欄位名稱),如程式1。
程式1
封裝SHA1加密:Select dbo.SHA1('字串' | 欄位名稱),如程式2。
程式2
後記
在測試完畢後,接下來的工作就是要與程式開發部門的人溝通好,將原本明碼的登入機制稍作修改,就可使用加密過的密碼登入系統了。使用者的習慣完全不用改變,即可讓處理流程更加安全。
【原文刊載於RUN!PC雜誌:2009年1月號】
回首頁...
關於RUN!PC
|
廣告刊登
|
聯絡我們
|
讀者服務
|
雜誌訂閱
|
出刊&補寄時間
-- Copyright© FLAG INFORMATION CO., LTD. 旗訊科技(股)公司. All rights reserved. 本站圖文著作權所有 未經授權 不得任意轉載使用 --
-- 請使用1024*768螢幕解析度,IE 7.0或firefox 3.0以上瀏覽器,以達到最佳閱讀效果--