Какие данные могут храниться в varbinary типе данных SQL Server?

У меня есть таблица, в которой userpassword поле имеют varbinary тип данных, Таким образом, я смущен, что, в котором должна форма, я сохраняю данные в userpassword поле, потому что, когда я сохраняю varchar данные, они дали мне ошибку.

18
задан shA.t 27 September 2015 в 10:11
поделиться

3 ответа

Столбец varbinary может хранить что угодно. Чтобы хранить в нем строку, вам придется привести ее к varbinary:

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

Но для пароля столбец varbinary обычно хранит какой-нибудь хэш. Например, хэш SHA1 с использованием функции HashBytes:

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

Хранение одностороннего хэша вместо реального пароля более безопасно. Вы можете проверить, совпадает ли пароль:

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

Но вы никак не сможете получить пароль, заглянув в таблицу. Поэтому только конечный пользователь знает свой пароль, и даже DBA не может его получить.

25
ответ дан 30 November 2019 в 08:21
поделиться

Вам необходимо явно привести VARCHAR.

SELECT CAST(N'Test' as VARBINARY)

Сообщение об ошибке SQL Server гласит.

Неявное преобразование из типа данных varchar в varbinary не разрешено.

1
ответ дан 30 November 2019 в 08:21
поделиться

SQL Server требует явного преобразования из varchar в varbinary, согласно большой таблице по CAST и CONVERT в MSDN

Таблица будет иметь столбец varbinary для хранения хэшированных значений согласно sys.sql_logins

1
ответ дан 30 November 2019 в 08:21
поделиться
Другие вопросы по тегам:

Похожие вопросы: