1

我有表[user],在SQL Server Management Studio中創建,通過這種結構:SQL Server Management Studio中:如何編輯MD5值

id int PRIMARY NOT NULL 
login varchar(255) NOT NULL 
password varchar(32) NOT NULL 

現在,我要插入第一個用戶到數據庫中。右擊表[user],選擇Edit top 200 rows並鍵入新用戶的值到網格:

id | login | password 
1  | admin | MD5('admin') 

但保存後,插入密碼爲MD5('admin'),但我預計21232f297a57a5a743894a0e4a801fc3哈希值。

如何在Microsoft SQL Server Management Studio中執行此操作?

謝謝

P.S.我正在使用SQL Server 2008 Express 10.50.1600.1和Microsoft SQL Server Management Studio 10.50.1600.1。

+0

'MD5'不是內置函數。有'HASHBYTES',但它返回'varbinary',而不是'varchar',並且不能通過編輯網格編輯'varbinary'。 – 2013-04-05 12:33:07

回答

3
  1. 散列值是字節數組,而不是字符串。使用VARBINARY列類型。
  2. 請勿插入未加密密碼的MD5。它takes 2.96 seconds to reverse crack online the hash to the password。使用正確醃製的密碼並將鹽寫入表格中。
  3. Right click to table [user], choose Edit top 200 rows and type new user values into the grid。那麼,你期望什麼?表格編輯是一個輸入值的功能,如果輸入字符串MD5('admin'),那麼表格中的值將是...... MD5('admin')。它不是一個交互式功能評估程序(除了MD5不是SQL Server的功能...)

不要重新發明輪子,特別是不要重新發明安全輪,如果你不會說流利的密碼。大多數框架都有用於成員管理的模塊。例如。 Introduction to Membership

2

您不能在網格表中運行查詢,您必須運行查詢來執行更新。要計算MD5你可以使用:

CONVERT(VARCHAR(32), HashBytes('MD5', 'admin'), 2) 
1

Edit Top 200 Rows功能對於互動數據條目,其中僅值被接受,而不是需要表達式中存儲之前評估。

如果要將插入的實際值作爲表達式的結果,請使用查詢窗口插入數據。 (我不知道你使用Edit功能是因爲你想要嘗試這種功能還是出於其他原因,但如果那是因爲你不知道如何使用SQL插入數據,請看。)

另外,由於@Damien has correctly noted在Transact-SQL中沒有MD5函數。有一個叫做HASHBYTES,它可以使用各種哈希算法,包括MD5。但是這個函數的結果是varbinary,而不是varchar。特別是對於MD5,它是varbinary(16)。因此,要存儲HASHBYTES的直接結果,您需要相應地更改password列的類型。

所以,改變列的類型,然後打開一個新的查詢窗口,輸入一個命令(或聲明)來插入數據。應該做的工作適合你可能看起來像這樣的一個:

INSERT INTO user (id, login, password) 
VALUES (1, 'admin', HASHBYTES('MD5', 'admin')); 

說句公道話,你可能省略改變列的類型,在這種情況下你需要更換簡單HASHBYTES調用,比如上面有一個像@Garath's answer。不過,您是否真的需要需要來將散列存儲爲varchar(32)而不是varbinary(16),這是一個完全不同的問題。

相關問題