插入 MS SQL DB,过程不起作用



我尝试了很多谷歌搜索并遵循了一些教程。我正在使用MS SQL并尝试制作一个简单的用户表,并加盐和散列密码,尚未进入加盐部分。

该表如下所示:

CREATE TABLE dbo.[User] (
UserID INT IDENTITY(1,1) NOT NULL,
Email NVARCHAR(45) NOT NULL,
Password BINARY(64) NOT NULL,
FirstName NVARCHAR(45) NULL,
LastName NVARCHAR(45) NULL,
CONSTRAINT [PK_User_UserID] PRIMARY KEY CLUSTERED (UserID ASC)
)

过程如下所示:

ALTER PROCEDURE dbo.[uspAddUser]
@pEmail NVARCHAR(45),
@pPassword NVARCHAR(45),
@pFirstName NVARCHAR(45) = NULL,
@pLastName NVARCHAR(45) = NULL,
@responseMessage NVARCHAR(250) OUTPUT
AS
BEGIN
SET NOCOUNT ON
BEGIN TRY
INSERT INTO dbo.[User] (Email, Password, FirstName, LastName)
VALUES (@pEmail, HASHBYTES('SHA_512', @pPassword), @pFirstName, @pLastName)
SET @responseMessage = 'Success'
END TRY
BEGIN CATCH
SET @responseMessage = ERROR_MESSAGE()
END CATCH
END

当我尝试插入该过程时,它不起作用:

DECLARE @responseMessage NVARCHAR(250)
EXEC dbo.[uspAddUser]
@pEmail = N'Admin@email.com',
@pPassword = N'123',
@pFirstName = N'Admin',
@pLastName = N'Administrator',
@responseMessage=@responseMessage OUTPUT
SELECT *
FROM [dbo].[User]

不显示任何结果。正常插入然后检索结果后,它会显示新创建的元组,但 ID 自动递增,就像创建的其他元组一样。我不太确定问题出在哪里,如果其他人理解,我将不胜感激。

编辑:

解决

显然,错误是我使用了错误的sha哈希。与其使用SHA_512我应该使用SHA2_512。

HASHBYTES('SHA_512', @pPassword)返回null以便插入查询中止。相反,您可以使用算法SHA2_512SHA2_256或所需的任何其他加密算法。

查看此链接以获取更多信息。

最新更新