我有一个在SQL Server Management Studio中创建的表[user],其结构如下:
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中执行此操作?
谢谢
附注:我使用的是SQL Server 2008 Express 10.50.1600.1和Microsoft SQL Server Management Studio 10.50.1600.1。
发布于 2013-04-05 20:38:57
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 function...)之外
不要重复发明轮子,特别是如果你不会说流利的密码,就不要重新发明安全轮子。大多数框架都有用于成员管理的模块。例如:Introduction to Membership。
发布于 2013-04-05 20:40:23
不能在网格表中运行查询,必须运行查询才能进行更新。要计算MD5,您可以使用:
CONVERT(VARCHAR(32), HashBytes('MD5', 'admin'), 2)发布于 2013-04-05 21:32:51
Edit Top 200 Rows特性用于交互式数据输入,其中只接受值,而不接受在存储之前需要计算的表达式。
如果希望插入的实际值是表达式的结果,请使用查询窗口插入数据。(我不知道您使用Edit特性仅仅是因为您想尝试该功能,还是出于其他原因,但如果是因为您不知道如何使用SQL语句插入数据,那么可以看看this manual。)
此外,与@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),这是一个完全不同的问题。
https://stackoverflow.com/questions/15833934
复制相似问题