2011-05-04 110 views
0

我想知道如何加密我在SQL Server 2008中的密碼列。我已閱讀this文章,但我仍然不知道如何...有一個更容易理解的教程?謝謝!加密SQL Server 2008中的密碼列

+1

您的「本文」鏈接似乎已經離開了AWOL。 – 2011-05-04 18:30:58

+0

哎呀,這裏去http://msdn.microsoft.com/en-us/library/ms179331.aspx – user133466 2011-05-04 18:32:30

+1

@ user133466 - 你爲什麼不從源應用程序存儲密碼散列? – Thomas 2011-05-04 18:37:19

回答

4

通常的做法是存儲密碼的散列。像:

HASHBYTES('SHA1', convert(varbinary(32), @password)) 

使用散列,您可以驗證密碼是否匹配,但您不知道密碼本身。所以即使黑客獲得了對數據庫的完全訪問權限,他仍然不知道密碼。

有很多教程on the web

+2

這也是一個不錯的主意鹽值。隨機(crytographically強)int或bigint可以很好地工作。 – Yuck 2011-05-04 18:43:56

+0

我將如何檢查憑證?我通常使用If ProfileDataset.Tables(「RO_User」)。Rows.Count = 1和strPassword.ToString <> ProfileDataset.Tables(「RO_User」)。行(0).Item(「User_psw」)。ToString Then ...但現在沒有地方讓我放置哈希函數 – user133466 2011-05-04 19:01:00

+0

@ user133466:以與原始密碼相同的方式哈希憑證。如果哈希匹配,字符串是相等的。 – Andomar 2011-05-04 19:21:40

2

您應該考慮存儲密碼散列而不是使用加密。如果你不瞭解這些差異,一個散列(也稱爲單向散列)會接收一個輸入併產生gobbledygook(稱爲散列),以便爲同一輸入生成相同的gobbledygook。身份驗證通過散列用戶在客戶端輸入的內容並將其與db中的gobbledygook進行比較。如果它們匹配,密碼是相同的。沒有深入細節,哈希永遠不能恢復爲純文本,這是他們的保護。然而,加密包括創建一個密碼,以便如果您有解密密鑰,則可以將密碼恢復爲純文本。

如果您使用的是SQL Server和ASP.NET,則應該使用SqlMembershipProvider查看Forms Authentication。

Explained: Forms Authentication in ASP.NET 2.0

SqlMembershipProvider Class

An Overview of Forms Authentication

+0

這正是我們使用永不離開數據庫的鹽的原因。 UI哈希+ salt =數據庫哈希。 – Yuck 2011-05-04 18:48:33

+0

Upvote for MembershipProvider。在我看來,你需要一個非常有說服力的理由不使用它。也爲gobbledygook。 – Simon 2011-05-04 19:05:05

+0

@Simon:MembershipProvider將您綁定到ASP.NET客戶端。向它添加新功能也很難。 – Andomar 2011-05-04 19:25:16