9

Básicamente estoy tratando de darle al usuario una contraseña determinada para que pueda probar algunas funciones en un sistema, ya que solo tengo nuestra cuenta de administrador y no puedo jugar con eso. Solo estoy seleccionando una cuenta aleatoria para poder hacer mi pruebas. Así que aquí está mi intento de una actualización:¿Cómo actualizar un campo varbinary con un valor específico?

UPDATE dbo.Login 
SET 
    Salt=CAST('bPftidzyAQik' AS VARBINARY), 
    Password=CAST('0x2B89C2954E18E15759545A421D243E251784FA009E46F7A163926247FDB945F85F095DBB1FFF5B2B43A6ADAE27B8C46E176902412C4F8943E39528FF94E0DD5B' AS VARBINARY) 
WHERE LoginID=10947 

funciona muy bien sin embargo el código en la base de datos se ve japonés para uno y la sintaxis para el otro se ve bien, pero no es el valor que estoy poniendo en, quiero usar el valor exacto que puse para poder iniciar sesión. ¿Cómo hago esto? He intentado varias soluciones diferentes de conversión y conversión sin suerte.

+0

Espera - ¿por qué este etiquetado con tanto MySQL y SQL Server? ¿Cuál es? –

+0

Disculpas, he arreglado las etiquetas ahora – shicky

Respuesta

25

Prueba esto:

UPDATE dbo.Login 
SET 
    Salt=CAST('bPftidzyAQik' AS VARBINARY), 
    Password=0x2B89C2954E18E15759545A421D243E251784FA009E46F7A163926247FDB945F85F095DBB1FFF5B2B43A6ADAE27B8C46E176902412C4F8943E39528FF94E0DD5B 
WHERE LoginID=10947 

(que no necesita convertir una cadena almacenar un valor hexadecimal en varbinary - eso es exactamente lo que está por defecto, sin las comillas)

La pregunta es , ¿cómo está generando ese valor hexadecimal de contraseña y está utilizando la misma codificación para generarlo que para leerlo? Si planea convertir esos datos nuevamente en una cadena, necesitará algún código para hacerlo. He aquí una función que escribí que hace esto:

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 

No sé lo útil que será para usted, sin embargo, ya que es muy posible que sea cual sea la aplicación es el uso de estos campos es la manipulación de los valores de manera diferente a esta función espera Para el registro, esta función toma un valor varbinary que originalmente era cadena utf-8, y devuelve el valor varchar de esa cadena. ¡Buena suerte!

+0

Gracias jake que me estaba metiendo la cabeza! Todo se resolvió ahora, literalmente solo era necesario eliminar las comillas en la contraseña :( – shicky

2

Desde 2008 está utilizando, intente esto:

UPDATE dbo.Login 
SET 
    Salt=CAST('bPftidzyAQik' AS VARBINARY), 
    Password=CONVERT(VARBINARY(MAX), '0x2B89C2954E18E15759545A421D243E251784FA009E46F7A163926247FDB945F85F095DBB1FFF5B2B43A6ADAE27B8C46E176902412C4F8943E39528FF94E0DD5B', 1) 
WHERE LoginID=10947 

(http://blogs.msdn.com/b/sqltips/archive/2008/07/02/converting-from-hex-string-to-varbinary-and-vice-versa.aspx)

+0

Lamentablemente sigue igual, la cadena ha cambiado, así que no obtengo la contraseña conocida en ese campo. – shicky

Cuestiones relacionadas