9

Temelde bir kullanıcı için belirli bir parola vermeye çalışıyorum, böylece bir sistemde bazı işlevleri sınayabilirim, sadece yönetici hesabımız var ve ben sadece onunla oynayamıyorum çünkü sadece rastgele bir hesap seçiyorum. test yapmak.Belirli bir değerle varbin alanı nasıl güncellenir?

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

Bu ince ancak veritabanında kod biri için japon görünüyor ve diğer sözdizimi iyi görünüyor ama koyuyorum onun değil değer, istediğim çalıştırır: Yani burada bir güncelleme benim girişimi Girdiğim değeri kullanabilmem için giriş yapabilirim. Bunu nasıl yapabilirim? Şanssız birkaç farklı döküm ve dönüştürme çözümü denedim.

+0

bekleyin - neden bu MySQL ve SQL Server hem etiketlenmiş? Hangisi? –

+0

Özür dilerim! Şimdi etiketlerinizi tamir ettim – shicky

cevap

25

bu deneyin:

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

(varbinary içine bir onaltılık değer depolayan bir dize döküm gerekmez - tırnaklar olmadan, yani varsayılan olarak sadece ne) sorudur

, bu şifre hex değerini nasıl üretiyorsunuz ve okuduğunuz gibi oluşturmak için aynı kodlamayı kullanıyor musunuz? Bu verileri tekrar bir dizeye dönüştürmeyi planlıyorsanız, bunu yapmak için bazı kodlara ihtiyacınız olacaktır. İşte bunu yapar yazdım bir işlev var:

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 

bu çok mümkün çünkü bu olsa sizin için nasıl yararlı olacağı bilmiyorum ne olursa olsun uygulama bu işlev daha farklı değerleri işleyen bu alanları kullandığını bekliyor. Kayıt için, bu işlev başlangıçta utf-8 dizgisi olan ve bu dizenin varchar değerini döndüren bir varbin değer alır. İyi şanslar!

+0

Teşekkürler jake başımdan gidiyordu! Şimdi tüm çözüldü, gerçekten sadece şifre üzerinde tırnak kaldırmak için gerekli :( – shicky

2

Eğer 2008 kullandığınıza göre, bu deneyin:

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

Ne yazık ki hala aynı, dize değişti bu yüzden bu alanda bilinen şifreyi alamıyorum. – shicky

İlgili konular