SQL Server Management Studio: comment modifier la valeur MD5

J'ai une table [user] , créée dans SQL Server Management Studio, avec cette structure:

 id int PRIMARY NOT NULL login varchar(255) NOT NULL password varchar(32) NOT NULL 

Maintenant, je veux insert le premier user dans la database. Faites un clic droit sur la table [user] , choisissez Edit top 200 rows et entrez les nouvelles valeurs user dans la grid:

 id | login | password 1 | admin | MD5('admin') 

Mais après logging, le mot de passe inséré est MD5('admin') , mais j'attends le hash 21232f297a57a5a743894a0e4a801fc3 .

Comment puis-je faire cela dans Microsoft SQL Server Management Studio?

Merci

PS J'utilise SQL Server 2008 Express 10.50.1600.1 et Microsoft SQL Server Management Studio 10.50.1600.1.

  1. Les valeurs de hachage sont des arrays d'octets et non des strings de caractères. Utilisez le type de colonne VARBINARY.
  2. N'insérez pas MD5 de passwords non salés. Il faut 2,96 secondes pour inverser la fissure en ligne le hachage du mot de passe . Utilisez un mot de passe correctement salé et écrivez le sel dans la table.
  3. Right click to table [user], choose Edit top 200 rows and type new user values into the grid . Bien, qu'espériez vous? L'édition de table est une fonctionnalité pour entrer des valeurs, et si vous entrez la string MD5('admin') alors la valeur dans la table sera … MD5('admin') . Ce n'est pas un évaluateur de fonction interactif (mis à part que MD5 n'est pas une fonction SQL Server …)

Ne pas réinventer la roue, surtout ne pas réinventer une roue de security si vous ne parlez pas crypto couramment. La plupart des frameworks ont des modules pour la gestion des membres. Par exemple. Introduction à l'adhésion .

Vous ne pouvez pas exécuter de requêtes dans les tables de la grid, vous devez exécuter la requête pour faire la mise à jour. Pour calculer MD5, vous pouvez utiliser:

 CONVERT(VARCHAR(32), HashBytes('MD5', 'admin'), 2) 

La fonction Edit Top 200 Rows permet de Edit Top 200 Rows des données interactives , où seules les valeurs sont acceptées, et non des expressions qui doivent être évaluées avant d'être stockées.

Si vous souhaitez que la valeur réelle insérée soit le résultat d'une expression, utilisez une window de requête pour insert datatables. (Je ne sais pas si vous avez utilisé la fonction d' Edit simplement parce que vous vouliez essayer cette fonctionnalité ou pour une autre raison, mais si vous ne saviez pas comment insert des données en utilisant SQL, jetez un coup d'œil à ce manuel . )

En outre, comme @Damien l'a noté correctement , il n'y a pas de fonction MD5 dans Transact-SQL. Il y en a un appelé HASHBYTES , qui peut utiliser divers algorithms de hachage, y compris MD5. Mais le résultat de cette fonction est varbinary , pas varchar . Pour MD5 en particulier, c'est varbinary(16) . Pour stocker le résultat direct de HASHBYTES , vous devez donc modifier le type de la colonne de password conséquence.

Modifiez le type de la colonne, puis ouvrez une nouvelle window de requête et tapez une command (ou une instruction ) pour insert datatables. Celui qui devrait faire le travail pour vous pourrait ressembler à ceci:

 INSERT INTO user (id, login, password) VALUES (1, 'admin', HASHBYTES('MD5', 'admin')); 

Pour être juste, vous pouvez omettre de changer le type de colonne, auquel cas vous devrez replace l'appel HASHBYTES simple comme ci-dessus par un comme dans la réponse de @ Garath . Si vous avez vraiment besoin de stocker les hachages comme varchar(32) au lieu de varbinary(16) est une question entièrement différente, cependant.