9

基本的に私はユーザーに特定のパスワードを与えようとしているので、システム上のいくつかの機能をテストすることができます。私たちの管理者アカウントしかないので遊べません。ランダムアカウントを選んでいるので、テスト。だからここアップデートでの私の試みです:varbinaryフィールドを特定の値で更新するにはどうすればよいですか?

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

それは私がしたい、しかし、データベース内のコードは、いずれかの日本人に見え、他の構文は私が入れている値正常に見えるが、そのない細かい動作しますそれは私がサインインすることができるように私が入れた正確な値を使用することです。これはどうやって行うのですか?私は運がないいくつかの異なるキャストと変換ソリューションを試しました。

+0

待ち - なぜこれは、MySQLとSQL Serverの両方でタグ付けされましたか?どちらですか? –

+0

申し訳ありません今、タグを修正しました – shicky

答えて

25

このお試しください:

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

(あなたが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値を返します。がんばろう!

+0

私の頭を抱えていたジェイクに感謝します!すべては今解決され、文字通りパスワードの引用符を削除するだけで済むようになりました。( – shicky

2

あなたは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

+0

残念ながら、文字列は変更されているので、そのフィールドには既知のパスワードがありません。 – shicky

関連する問題