22

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

4

4 回答 4

27

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 也无法找回它。

于 2010-07-18T12:53:52.940 回答
1

您将需要显式转换 VARCHAR。

SELECT CAST(N'Test' as VARBINARY)

SQL Server 错误消息说。

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

于 2010-07-18T12:55:14.877 回答
1

根据 MSDN 中 CAST 和 CONVERT 上的大表,SQL Server 需要从varchar 到 varbinary的显式转换

该表将有一个 varbinary 列来按照sys.sql_logins存储散列值

于 2010-07-18T12:55:58.963 回答
0
SELECT CAST(N'Test' as VARBINARY)

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

SELECT CAST(N'Test' as VARBINARY(30))
于 2019-01-19T00:27:23.250 回答