我有一个表,其中userpassword字段有varbinary数据类型,所以我很困惑,在哪种形式应该保存数据到userpassword字段,因为当我保存varchar数据它给我错误.
解决方法
一个varbinary列可以存储任何东西.要在其中存储字符串,您必须将其转换为varbinary:
declare @t table (id int identity,pwd varbinary(50)) insert into @t (pwd) values (cast('secret' as varbinary(50)))
但是对于密码,varbinary列通常存储某种哈希值.例如,使用HashBytes
function的SHA1哈希:
insert into @t (pwd) values (HashBytes('sha1','secret'));
存储单向散列而不是真正的密码更安全.您可以检查密码是否匹配:
select * from @t where pwd = HashBytes('sha1','secret')
但是没有办法通过查看表来检索密码.所以只有最终用户知道他的密码,甚至DBA也不能检索它.