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

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

Ответы

Ответ 1

Столбец

A 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 не может его получить.

Ответ 2

Вам нужно явно указать VARCHAR.

SELECT CAST(N'Test' as VARBINARY)

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

Неявное преобразование из типа данных varchar в varbinary не является допускается.

Ответ 3

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

В таблице будет столбец varbinary для хранения хешированных значений по sys.sql_logins

Ответ 4

SELECT CAST(N'Test' as VARBINARY)

------you нужно указать размер ------→

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