ok on le savait qu’elle était pas top cette fonction déterministe : https://blog.kastenbaum.net/dont-crypt-password-with-mysql-functions/
mais de là à la supprimer ….
c’est fait mysql8 c’est supprimé (mariadb aussi ? why??).
on veut bien changer , mais pour les anciens mots de passe, on fait comment ??
on émule car old_password c’est compliqué mais on connait, et password, c’est du sha1 de unhex de sha1 https://stackoverflow.com/questions/5654819/how-can-i-decrypt-mysql-passwords :
drop function if exists my5password; delimiter $$ create function my5password (input varchar(250)) returns varchar(50) deterministic begin return concat('*',upper(sha1(unhex(sha1(input))))); end$$ delimiter ; drop function if exists old_password; delimiter $$ create function old_password (input char(250)) returns char(16) deterministic begin declare nr bigint; declare nr2 bigint; declare ad bigint; declare inlen int; declare i int; declare b char; declare tmp int; declare output char(16); set nr = 1345345333; set nr2 = 0x12345671; set ad = 7; set inlen = length(input); set i = 1; while i <= inlen do set b = mid(input, i, 1); if b != ' ' and b != '\t' then set tmp = ord(b); set nr = nr ^ ((((nr & 63) + ad) * tmp) + ((nr << 8) & 0xffffffff)); set nr2 = nr2 + (((nr2 << 8) & 0xffffffff) ^ nr); set ad = ad + tmp; end if; set i = i + 1; end while; set nr = nr & ((1 << 31) - 1); set nr2 = nr2 & ((1 << 31) - 1); set output = lower(concat(hex(nr), hex(nr2))); return output; end$$ delimiter ; select my5password('toto'),old_password('toto');
alors bon ouais je n’ai pas réussi à créer la fonction qui s’appelle password() .
Enfin si on peut la créer mais il faut l’appeler mabase.password() donc ça revient au même, il faut repasser dans tous les SQL, et remplacer les where password(saisi)=champw par my5password(…
Quelle idée à la con de supprimer password(), ça va râler, c’est bien un coup d’oracle. On aurait pu rajouter un paramètre ‘salt’ optionnel, mais bon ça n’aurait pas fermé le trou de sécurité risqué par le transport de mot de passe non crypté vers mysql.