当前位置: 首页 > 知识库问答 >
问题:

为什么我的SQL密码散列过程不运行?

王炜
2023-03-14

我正在尝试创建一个SQL过程,对密码输入进行散列。这段代码将无法运行,并且我没有得到任何有用的响应错误。

第一部分创建表,第二部分创建过程。当我在第三部分调用我的过程时,它将值发送到过程中。在那里,密码应该使用SHA2_512进行散列,并插入到我们做了eRalier的表中。

我用网上的研究做了这段代码,我没有得到的部分是:

我的值之前的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个答案

令狐阳秋
2023-03-14

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

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

当对密码进行哈希时,您希望在过程中尽可能早地进行哈希。这通常意味着使用PHPpassword_hash并只在MySQL中转储散列数据。

如果不使用PHP与SQL交互,那么可以使用其他服务器方法,如Argon2或libs钠。

另外,您应该使用MB4UTF-8字符集和排序规则-原则UTF8MB4_General_CI(为什么?)

 类似资料:
  • 问题内容: 我正在使用Django REST Framework(DRF)创建一个可以注册新用户的终结点。但是,当我通过POST到达创建端点时,新用户将通过序列化器保存,但密码以明文形式保存在数据库中。我的序列化器的代码如下: 请注意,我使用的是Django auth包中的默认用户模型,并且对使用DRF来说是一个新手! 问题答案: 问题是DRF只需将字段值设置到模型上即可。因此,密码在“密码”字段

  • 经过一些故障排除,我确定当我使用PHP的password_hash函数散列密码时,加密标识符是$2y$。但是,当我使用password_verify函数将存储的散列密码与用户输入密码进行比较时,password_verify不会返回true。如果我使用https://www.bcrypt-generator.com/上的$2a$标识符生成一个新密码,并用它替换存储的散列密码,它将返回true。 我

  • 我为我的密码学初学者水平道歉 在我的项目中,我发现在将密码插入数据库之前需要对密码进行散列,因此我搜索了顶级散列算法,发现了PBKFD2和salt方法。 我这样做的方法是生成随机64char Salt并使用它来散列密码。然后将哈希密码和salt存储在我的数据库中。(注:注册时也会生成密码。这不是我的选择) 登录时,我的Servlet获取密码,然后用数据库中存储的salt散列它。但是我得到了不同的结

  • 下午好我自己在一个安全项目中工作。我在PHP中检查登录代码时遇到问题。我不知道为什么,但当我尝试与我创建的“数据库中的密码为纯文本”的用户登录时,它会说密码不正确。 其思想不是将密码转换为散列。我知道这是一个很大的安全风险,但显然我不会将其用于专业用途。我的目的是做安全测试。 check.php: 编辑我已经纠正了错误,但我仍然有问题的日志,出现一个menssage:"姓名或密码不正确!".在我的

  • 我一直在阅读OWASP10,我遇到了存储信息的最佳实践。咸杂碎。在这里,您为每个密码生成一个随机的salt,并对其进行梳理、散列和存储。我的疑问是,如果salt是随机生成的,当用户键入密码时,如何对密码进行身份验证?salt是否与用户名一起保存?如果是这样,这种做法仍然是脆弱的。或者他们是怎么做到的?

  • 我正在尝试将用户从旧的Drupal6 CMS迁移到KeyCloak。我想迁移用户与他们的旧密码,然后分配一个“更新密码”要求的行动到他们的个人资料。 然而,迁移密码似乎有问题,因为我只能以散列形式访问它们。 null 有没有人有幸让这个功能发挥作用?