首先匹配密码然后更改密码的存储过程



我在编写一个存储过程时遇到问题,该过程首先根据用户提供的密码(也是哈希密码)检查哈希密码。如果密码匹配,则过程会将密码更改为用户提供的新密码,以便在存储之前进行哈希处理。我试了一下,发现了下面的代码,似乎完全超出了正确的语法。任何可以提供的帮助将不胜感激。有问题的代码如下:

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

问题背后的一些原因:

  • 如果你只是盲目地将应用设置为过程的第一行,为什么你的应用会提供@pHashedPassword
  • 语法set @variable AS SELECT ...不是有效的 T-SQL 语法。
  • 您的BEGIN没有匹配的END
  • 语法UPDATE table (也无效。
  • 我认为没有理由将旧密码拉入变量中,在查询之外进行比较,然后执行更新,当您可以在一个步骤中完成所有这些操作时。
  • 您不能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 

最新更新