3

ハッシュ化されたパスワードをユーザーが指定した (これもハッシュ化された) パスワードに対して最初にチェックするストアド プロシージャの作成に問題があります。パスワードが一致する場合、プロシージャはパスワードをユーザーが提供する新しいパスワードに変更し、保存する前にハッシュします。私はそれを突き刺し、適切な構文から完全に外れているように見える以下のコードを見つけました。提供できるヘルプは大歓迎です。問題のコードは以下のとおりです。

Create Proc UserChangePassword
    @pGuid varchar(50),
    @pOldPassword varchar(100),
    @pHashedPassword varchar (100),
    @pNewPassword varchar(10)
AS
        set @pHashedPassword = HASHBYTES('md5', @pOldPassword)
        set @pOldPassword as select st01Password from st01UserData where @pGuid = st01GUID
        If  ( @pOldPassword = @pHashedPassword)
    Begin
        Update st01UserData (
        set st01Password = HASHBYTES('md5', @pNewPassword))
        where st01GUID = @pGuid
        Return 'SUCCESS'
    Else
        RETURN 'FAILED'
GO
4

1 に答える 1

6

問題の背後にあるいくつかの理由:

  • @pHashedPassword手順の最初の行としてやみくもに何かに設定しただけで、アプリが提供しているのはなぜですか?
  • 構文set @variable AS SELECT ...が有効な T-SQL 構文ではありません。
  • 一致する がありませBEGINEND
  • 構文UPDATE table (も無効です。
  • 古いパスワードを変数に取り込み、クエリの外部で比較してから更新を実行する理由はほとんどありません。これらすべてを 1 つのステップで実行できる場合です。
  • RETURN文字列はできませんINT。.
  • また、古いパスワードは 100 文字まで使用できるのに、新しいパスワードは 10 文字しかないことにも興味がありますか?

このバージョンを試してください:

CREATE PROCEDURE dbo.UserChangePassword
  @pGuid        VARCHAR(50),
  @pOldPassword VARCHAR(100),
  @pNewPassword VARCHAR(10)
AS
BEGIN
  SET NOCOUNT ON;

  UPDATE dbo.st01UserData
    SET st01Password = HASHBYTES('md5', @pNewPassword)
    WHERE st01Guid = @pGuid
    AND st01Password = HASHBYTES('md5', @pOldPassword);

  IF @@ROWCOUNT = 0
    RETURN -1;

  RETURN 0;
END
GO 
于 2012-05-22T19:28:31.137 に答える