不幸的是,我在數據庫中有明文密碼。我想盡可能少地傳遞這些明文值,比如說比較和更新。爲此,我試圖創建排除明文密碼的Users表的視圖,而是提供該密碼的哈希值。我可以連接視圖中的虛擬列嗎?
這裏是我當前的SQL Server視圖,它不起作用:
SELECT CAST(CAST(32768 * RAND() AS INT) AS NVARCHAR) AS PasswordSalt
HashBytes('SHA1', PasswordSalt + u.Password) AS PasswordHash
FROM dbo.Users AS u
我很樂意聽到的替代品,以這種方法,但在其他問題似乎串聯虛擬列PasswordSalt與..任何東西。舉例來說,下面這個簡單的視圖的工作原理:
SELECT u.Login AS Column1, u.Login + 'b' AS Column2
但是這一次沒有:
SELECT u.Login AS Column1, Column1 + 'b' AS Column2
我從Management Studio中收到錯誤
無效的列名稱列1 」。
在此先感謝有關我做錯事情的任何想法!
你可以只加密列(SQL服務器2005 +):http://msdn.microsoft.com/en-us/library/ms179331% 28SQL.90%29.aspx – 2010-03-03 22:57:01
只有我能夠重現錯誤的方法是因爲column1不存在 – 2010-03-03 22:58:38
我選擇了一個散列來確保消費者可以重現該轉換,但不能恢復u.Password。我相信排除加密。 – ladenedge 2010-03-04 06:14:05