2011-11-11 17 views
1

我有一個SQL Server 2005數據庫爲一個網站,用明文存儲用戶密碼,我想哈希和鹽他們。我知道如何使用HashBytes函數來獲取和比較散列,但我不知道轉換現有密碼列數據的最佳方法。目前它存儲爲varchar(50)列,因爲我打算使用SHA-1,所以我想使用binary(20)如何在原地轉換T-SQL列類型和數據?

我正在考慮SELECT INTO一個臨時表,ALTER現有的列類型,然後INSERT哈希和鹽漬密碼回到用戶ID匹配的地方。這是一種有效的方法嗎?有沒有一種方法可以在沒有臨時表的情況下進行?

謝謝!

回答

2

您可以只需store the binary info as a hex string。這有一些好處:

  • 可輕鬆就地更新查詢
  • 無需臨時表
  • 無需改變表的結構(您的最終結果是一個字符串)

我建議編寫函數來幫助你進行salting/hashing/hex-conversion(反之亦然)。

+0

啊,好主意 - 謝謝! –

+0

+1 - 沒有任何DDL的好解決方案! – JNK

0

是的。

請記住,添加一列很可能會導致頁面拆分,因此請考慮儘快運行維護以重建/碎片整理索引和數據頁面。

ALTER TABLE MyTable ADD 'BinaryPW' binary(20) 

UPDATE MyTable 
SET BinaryPW = MyHashFunction(VarCharPW) 

UPDATE MyTable 
SET VarCharPW = ''