为什么我的SQL密码哈希程序没有运行?

时间:2018-04-11 11:36:11

标签: mysql sql

我正在尝试创建一个哈希密码输入的SQL过程。此代码不会运行,我没有收到任何有用的响应错误。

第一部分创建表,第二部分创建过程。当我在第三部分中调用我的过程时,它将值发送到过程中。在那里,密码应该使用SHA2_512进行哈希处理并插入到我们制作的表格中。

我使用在线研究制作此代码,我不能得到的部分是:

我的价值观之前的N

SetNoCount

@responsemessage

-- makes Admin table
CREATE TABLE IF NOT EXISTS `AdminUser` (
  `AdminID` smallint(6) NOT NULL AUTO_INCREMENT,
  `Username` char(15) NOT NULL,
  `PasswordHash` BINARY(64) NOT NULL,
  `Fornavn` char(30) NOT NULL,
  `Etternavn` char(40) NOT NULL,
  `Email` char(40) NOT NULL,
  PRIMARY KEY (`AdminID`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

-- Makes hashing procedure
CREATE OR REPLACE PROCEDURE vm_ski.addAdmin
    @pUsername NVARCHAR(50), 
    @pPassword NVARCHAR(50),
    @pFornavn NVARCHAR(30), 
    @pEtternavn NVARCHAR(40),
    @pEmail NVARCHAR(40),
    @responseMessage NVARCHAR(250)='' OUTPUT    
AS
BEGIN
    SET NOCOUNT ON

    BEGIN TRY

        INSERT INTO vm_ski.AdminUser (Username, PasswordHash, Fornavn, Etternavn, Email)
        VALUES(@pUsername, HASHBYTES('SHA2_512', @pPassword), @pFornavn, @pEtternavn, @pEmail)

        SET @responseMessage='Success'

    END TRY
    BEGIN CATCH
        SET @responseMessage=ERROR_MESSAGE() 
    END CATCH

END;

-- Admin example
DECLARE @responseMessage NVARCHAR(250)

EXECUTE vm_ski.addAdmin
          @pUsername = N'sondre',
          @pPassword = N'example'
          @pFornavn = N'Sondre'
          @pEtternavn = N'Morgendal'
          @pEmail = N'sondre.example@gmail.com'
          ;

1 个答案:

答案 0 :(得分:3)

  

这不是问题的直接答案;这是关于问题方法的安全说明

在 MySQL中哈希密码。提供给MySQL的数据是纯文本,并且在被转储到数据库之前很容易被MySQL处理日志以及可能的许多其他地方拦截(例如,如果发送到数据库的消息包是非localhost并且是非TLS)。 (Why?

在散列密码时,您希望尽可能早地执行此操作。这通常意味着使用PHP password_hash并简单地仅在中转储散列数据。

如果您不使用PHP与SQL交互,那么您可以使用其他服务器方法,例如Argon2Libsodium

另外作为一个侧面点,您应该使用mb4 UTF-8字符集和排序规则 - 主要是utf8mb4_general_ciWhy?