У меня есть таблица, в которой 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
обычно хранит какой-нибудь хэш. Например, хэш SHA1 с использованием функции HashBytes
:
insert into @t (pwd) values (HashBytes('sha1', 'secret'));
Хранение одностороннего хэша вместо реального пароля более безопасно. Вы можете проверить, совпадает ли пароль:
select * from @t where pwd = HashBytes('sha1', 'secret')
Но вы никак не сможете получить пароль, заглянув в таблицу. Поэтому только конечный пользователь знает свой пароль, и даже DBA не может его получить.
Вам необходимо явно привести VARCHAR.
SELECT CAST(N'Test' as VARBINARY)
Сообщение об ошибке SQL Server гласит.
Неявное преобразование из типа данных varchar в varbinary не разрешено.
SQL Server требует явного преобразования из varchar в varbinary, согласно большой таблице по CAST и CONVERT в MSDN
Таблица будет иметь столбец varbinary для хранения хэшированных значений согласно sys.sql_logins