2016-12-21 1 views
1

パスワードハッシュの実装が任されており、SQLスクリプトを作成してすべての現在のユーザーレコードをハッシュする必要があります。これまでのところ、私は独自の塩を作ることができました(別の質問からも)。しかし実際にそれらをハッシュしようとするのは難しいです。SQL - 更新クエリ - 別のフィールドに設定したフィールドの値にアクセスしています設定しています

私のコードは次のとおりです。

UPDATE 
    user 

SET 
    pass_salt = left(NEWID(), 13) 
    ,user_pwd = convert(varchar(100), HASHBYTES('SHA1', user.user_pwd + user.pass_salt), 2) 

WHERE 
    security_user_id = 98 

私の問題は、私がどのようにか本当にわからないですuser_pwd設定しながら、私はpass_saltフィールドにアクセスすることができます。現在、nullを返すだけです。

注:私はSQL Server 2012を使用しています。テスト目的でレコードを1つだけ変更するには、 'where'句を使用しています。

すべてのご協力をいただきありがとうございます。前もって感謝します!

答えて

0

あなたはCTEでこれを行うことができます。一般的には

WITH toupdate as (
     SELECT u.*, left(NEWID(), 13) as new_pass_salt 
     FROM user u 
    ) 
UPDATE toupdate 
    SET pass_sale = new_pass_salt, 
     user_pwd = convert(varchar(100), HASHBYTES('SHA1', user_pwd + new_pass_salt), 2) 
    WHERE security_user_id = 98; 

を、updateに、右からの「新しい」レコードから来=の左側の値と値 "古いレコードです。

+0

素晴らしいです!ありがとうございました! –

関連する問題