Какие данные могут быть сохранены в 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))