Какие данные могут храниться в varbinary типе данных SQL Server? - PullRequest
18 голосов
/ 18 июля 2010

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

Ответы [ 4 ]

25 голосов
/ 18 июля 2010
Столбец

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')

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

1 голос
/ 18 июля 2010

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

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

1 голос
/ 18 июля 2010

Вам нужно будет явно разыграть VARCHAR.

SELECT CAST(N'Test' as VARBINARY)

В сообщении об ошибке SQL Server говорится.

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

0 голосов
/ 19 января 2019
SELECT CAST(N'Test' as VARBINARY)

------ Вы должны указать размер ---------->

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