Mysql
 sql >> Datenbank >  >> RDS >> Mysql

MYSQL:Prozedur mit if-Anweisung

Sie sollten diese Passwörter wirklich hashen, verwenden Sie den folgenden Code

DELIMITER $$

CREATE DEFINER=`root`@`localhost` PROCEDURE `change_pass`(
    in_Email VARCHAR(45),
    in_PassOld VARCHAR(45),
    in_PassNew VARCHAR(45)
)
BEGIN
  DECLARE KnowsOldPassword INTEGER;

  SELECT count(*) INTO KnowsOldPassword 
    FROM User 
    WHERE Email = in_Email AND passhash = SHA2(CONCAT(salt, in_PassOld),512);
  IF (KnowsOldPassword > 0) THEN
    UPDATE User 
      SET Passhash = SHA2(CONCAT(salt, inPassNew),512) 
      WHERE Email = in_Email;
  END IF;
END $$

DELIMITER ;

Das salt ist ein zusätzliches Feld in der Tabelle user das ist mehr oder weniger zufällig, muss aber nicht geheim sein. Es dient dazu, Regenbogentische zu besiegen .
Sie können Salt auf einen kurzen String char(10) oder zufällige Daten setzen. z.B.

salt = ROUND(RAND(unix_timestamp(now())*9999999999);

Sie müssen das Salt nicht aktualisieren, generieren Sie es einfach einmal und speichern Sie es dann.

Weitere Informationen zu diesem Thema finden Sie unter:
Salting meiner Hashes mit PHP und MySQL
Wie sollte ich ethisch vertretbar mit der Speicherung von Benutzerkennwörtern für einen späteren Abruf im Klartext umgehen?

Ein Kommentar zu Ihrem Code

IF(@PassOld == in_PassOld) THEN  //incorrect 
IF(@PassOld = in_PassOld) THEN   //correct, SQL <> PHP :-)