25

基本的に、私はユーザーに特定のパスワードを与えようとしているので、システムの一部の機能をテストできます。管理者アカウントしか持っておらず、ランダムなアカウントを選択しているだけなので、テストを行うことができません。だからここに私の更新の試みがあります:

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

正常に動作しますが、データベースのコードは1つは日本語に見え、もう1つは構文が正常に見えますが、入力する値ではありません。入力した正確な値を使用して、サインインできるようにします。私はこれをしますか?私はいくつかの異なるキャストと変換のソリューションを試しましたが、運がありませんでした。

4

2 に答える 2

48

これを試して:

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

(16進値を格納する文字列をvarbinaryにキャストする必要はありません。これは、引用符なしのデフォルトの文字列です)

問題は、そのパスワードの16進値をどのように生成し、それを読み取るのと同じエンコーディングを使用して生成するかということです。そのデータを文字列に変換し直すことを計画している場合は、そのためのコードが必要になります。これを行う私が書いた関数は次のとおりです。

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 

ただし、これらのフィールドを使用しているアプリがこの関数の期待とは異なる方法で値を処理している可能性が非常に高いため、これがどの程度役立つかはわかりません。レコードの場合、この関数は元々utf-8文字列であったvarbinary値を取り、その文字列のvarchar値を返します。幸運を!

于 2011-12-19T21:41:29.090 に答える
6

2008を使用しているので、これを試してください。

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

于 2011-12-19T21:52:00.087 に答える