在过程不起作用的情况下插入MS SQL DB

时间:2018-06-21 08:56:45

标签: sql-server azure azure-sql-database

我尝试了很多谷歌搜索并遵循一些教程。我正在使用MS SQL并尝试创建一个简单的User表和salt并对密码进行哈希处理,但是还没有涉及到Salting部分。

该表如下所示:

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哈希。我应该使用 SHA2_512。

,而不是使用SHA_512。

1 个答案:

答案 0 :(得分:1)

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

查看this link了解更多信息。