一尘不染

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

sql

我有一个表,其中userpassword字段具有varbinary数据类型,所以我很困惑应该以哪种形式将数据保存到userpassword字段中,因为当我保存varchar数据时,它给了我错误。


阅读 135

收藏
2021-03-17

共1个答案

一尘不染

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都无法检索它。

2021-03-17