domenica 13 dicembre 2020

MySQL/MariaDB PASSWORD()

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.