web-dev-qa-db-fra.com

Quelles données peuvent être stockées dans le type de données varbinary de SQL Server?

J'ai une table dans laquelle le champ userpassword a un type de données varbinary. Je ne comprends donc pas sous quelle forme dois-je enregistrer les données dans le champ userpassword, car lorsque j'ai enregistré les données varchar, une erreur s'est produite.

17
Fraz Sundal

Une colonne varbinary peut tout stocker. Pour y stocker une chaîne, vous devez la convertir en varbinary:

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

Mais pour un mot de passe, une colonne varbinary stocke généralement un hachage quelconque. Par exemple, un hachage SHA1 utilisant la fonction HashBytes :

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

Stocker un hachage à sens unique au lieu du mot de passe réel est plus sécurisé. Vous pouvez vérifier si le mot de passe correspond:

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

Mais il n’ya aucun moyen de récupérer le mot de passe en consultant le tableau. Ainsi, seul l'utilisateur final connaît son mot de passe et même l'administrateur de base de données ne peut le récupérer.

23
Andomar

Vous devrez explicitement transtyper VARCHAR.

SELECT CAST(N'Test' as VARBINARY)

Le message d'erreur SQL Server dit.

La conversion implicite du type de données varchar en varbinary n’est pas permis.

1
Chris Diver

SQL Server nécessite une conversion explicite de varchar en varbinary , conformément à la grande table sur CAST et CONVERT dans MSDN.

La table aura une colonne varbinary pour stocker les valeurs hachées selon sys.sql_logins

1
gbn
SELECT CAST(N'Test' as VARBINARY)

------ vous devez lui donner une taille ---------->

SELECT CAST(N'Test' as VARBINARY(30))
0
Loay Oraby