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),这是一个完全不同的问题。

相关问题