Fondamentalement, j'essaie de donner à un utilisateur un certain mot de passe afin que je puisse tester certaines fonctionnalités sur un système, car je n'ai que notre compte d'administrateur et je ne peux pas jouer avec ce que je choisis juste un compte aléatoire afin que je puisse faire mes tests. Voici donc ma tentative de mise à jour:
UPDATE dbo.Login
SET
Salt=CAST('bPftidzyAQik' AS VARBINARY),
Password=CAST('0x2B89C2954E18E15759545A421D243E251784FA009E46F7A163926247FDB945F85F095DBB1FFF5B2B43A6ADAE27B8C46E176902412C4F8943E39528FF94E0DD5B' AS VARBINARY)
WHERE LoginID=10947
Il fonctionne correctement, mais le code de la base de données semble japonais pour l'un et la syntaxe pour l'autre semble correct, mais ce n'est pas la valeur que je mets, je veux qu'il utilise la valeur exacte que je mets pour que je puisse me connecter. Comment est-ce que je fais ça? J'ai essayé plusieurs solutions de conversion et de conversion sans succès.
Essaye ça:
UPDATE dbo.Login
SET
Salt=CAST('bPftidzyAQik' AS VARBINARY),
Password=0x2B89C2954E18E15759545A421D243E251784FA009E46F7A163926247FDB945F85F095DBB1FFF5B2B43A6ADAE27B8C46E176902412C4F8943E39528FF94E0DD5B
WHERE LoginID=10947
(vous n'avez pas besoin de convertir une chaîne stockant une valeur hexadécimale en varbinary - c'est exactement ce que c'est par défaut, sans les guillemets)
La question est, comment générez-vous cette valeur hexadécimale de mot de passe et utilisez-vous le même encodage pour le générer que pour le lire? Si vous prévoyez de reconvertir ces données en chaîne, vous aurez besoin de code pour le faire. Voici une fonction que j'ai écrite qui fait ceci:
CREATE FUNCTION ConvertBinary
(
@value AS varbinary(max)
) RETURNS VARCHAR(MAX) AS BEGIN
DECLARE @result AS varbinary(max),
@result2 AS varchar(max),
@idx AS bigint;
IF @value IS null
return null;
SELECT @result = @value;
SELECT @result2 = '';
SELECT @idx = 1;
WHILE substring(@result, @idx, 1) != 0 AND @idx < len(@result)
BEGIN
SET @result2 = @result2 + cast(substring(@result,@idx,1) as char(1));
SET @idx = @idx + 1;
END
RETURN @result2;
END
Je ne sais pas à quel point cela vous sera utile, car il est très possible que l'application qui utilise ces champs gère les valeurs différemment de ce que cette fonction attend. Pour mémoire, cette fonction prend une valeur varbinary qui était à l'origine une chaîne utf-8 et renvoie la valeur varchar de cette chaîne. Bonne chance!
Puisque vous utilisez 2008, essayez ceci:
UPDATE dbo.Login
SET
Salt=CAST('bPftidzyAQik' AS VARBINARY),
Password=CONVERT(VARBINARY(MAX), '0x2B89C2954E18E15759545A421D243E251784FA009E46F7A163926247FDB945F85F095DBB1FFF5B2B43A6ADAE27B8C46E176902412C4F8943E39528FF94E0DD5B', 1)
WHERE LoginID=10947