Proprio in questi giorni sto migrando un software che utilizzava come backend MySQL 5.5 e ora utilizzerà MySQL 8.0. Le password degli utenti erano criptate con la funzione PASSWORD(). Ma nella nuova versione non è più utilizzabile. Si legge da qui:
Pre-4.1 password hashes and the
mysql_old_password
plugin are deprecated in
MySQL 5.6 and support for them is removed in MySQL 5.7. They
provide a level of security inferior to that offered by 4.1
password hashing and the
mysql_native_password
plugin.
Per intendere, se da mysql client si inseriva la query:
mysql> SELECT PASSWORD('ciao')));
+------------------------------------------------------------------------+
| PASSWORD('ciao'))) |
+------------------------------------------------------------------------+
| *a9ecbbbba717af9f75911f4f22b0b3067af885ea |
+------------------------------------------------------------------------+
1 row in set (0.04 sec)
In MySQL 8.0 ottengo:
mysql> SELECT password('ciao')));
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '('ciao')))' at line 1
Abbiamo un problema, che però si può ovviare con:
mysql> SELECT SHA1(UNHEX(SHA1('ciao')));
+----------------------------------------------------------------------+
| SHA1(UNHEX(SHA1('ciao'))) |
+----------------------------------------------------------------------+
| a9ecbbbba717af9f75911f4f22b0b3067af885ea |
+----------------------------------------------------------------------+
Manca semplicemente il carattere '*' iniziale.