SQL Server的varbinary数据类型可以存储哪些数据?

25

我的表中有一个用户密码字段,该字段具有varbinary数据类型,所以我困惑应该以哪种形式将数据保存到用户密码字段中,因为当我保存varchar数据时,它会给出错误。

4个回答

29

varbinary列可以存储任何内容。如果要将字符串存储在其中,您需要将其转换为varbinary

declare @t table (id int identity, pwd varbinary(50))
insert into @t (pwd) values (cast('secret' as varbinary(50)))

但是对于密码来说,varbinary列通常存储某种哈希值。例如,使用HashBytes函数生成的SHA1哈希值:

insert into @t (pwd) values (HashBytes('sha1', 'secret'));

存储单向哈希而不是真实密码更加安全。您可以检查密码是否匹配:

select * from @t where pwd = HashBytes('sha1', 'secret')

但是通过查看表格,您无法检索密码。因此,只有最终用户知道他的密码,甚至DBA也无法检索它。


我可以存储像音频文件这样的原始文件吗? - GorvGoyl
1
@JerryGoyal 是的。另一个常见的做法是将较大的文件存储在磁盘上,只在数据库中存储文件路径。 - John Smith

1

你需要显式地将VARCHAR转换。

SELECT CAST(N'Test' as VARBINARY)

SQL Server错误信息如下。

不允许从数据类型varchar隐式转换为varbinary。


1

根据MSDN中CAST和CONVERT的大表,SQL Server需要对varchar到varbinary进行显式转换。

该表将具有一个varbinary列,以存储哈希值,如sys.sql_logins所示。


0
SELECT CAST(N'Test' as VARBINARY)

------你必须给它一个大小 ---------->

SELECT CAST(N'Test' as VARBINARY(30))

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接