gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 11:01:02 25 4
gpt4 key购买 nike

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

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

关于sql-server - 首先匹配密码然后更改密码的存储过程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10708536/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com