Come è noto, per l'accesso in connessione a MySQL sono necessarie una username e una password; entrambi questi dati sono conservati in una tabella, denominata user, del database chiamato mysql. Mentre il dato relativo alla username è inserito "in chiaro" all'interno della tabella, quello relativo alla password subisce invece un processo di codifica (hashing) tramite la funzione PASSWORD(); il DBMS "vedrà" la password nella sua forma codificata, l'utente invece la utilizzerà nel formato in cui l'ha scelta.
Per fare un esempio, la password "password" potrà essere vista da MySQL come "5d2e19393cc5ef67". La forma codificata rappresenta la password "reale", mentre quella utilizzata dall'utente è soltanto una stringa da passare come parametro al processo di codifica.
Quindi, nel momento in cui si cerca di stabilire una connessione, il DBMS riceve come input una stringa che viene sottoposta a codifica e poi confrontata con i valori dei records archiviati nel campo "password" della tabella "user".
Una volta stabilita la connessione, sarà possibile modificare il valore corrispondente al campo "password" utilizzando la funzione PASSWORD(), il comando SET PASSWORD() o in alternativa GRANT; ma questo sarà possibile soltanto se l'utente potrà vantare sufficienti privilegi.
Riassumendo, possiamo dire che il DBMS utilizza parole chiave codificate durante il processo di connessione richiesto da un terminale, mentre genera parole chiave codificate quando dal terminale viene inviato un input contenente una chiamata della funzione PASSWORD() o un comando SQL come SET PASSWORD() o GRANT.
Il processo di codifica delle password in MySQL è stato modificato è reso più sicuro a partire dalla versione 4.1 del DBMS; questo aggiornamento ha però creato alcuni problemi di "compatibilità verso l'alto", infatti, se da una parte le versioni 4.1 e superiori non presentano difficoltà nella connessione a server più datati, dall'altra sono stati riscontrati alcuni problemi per client MySQL precedenti alla 4.1 nella connessione a server più recenti. Per fare un esempio, provando a connettersi da un client 3.23 (versione ancora largamente diffusa) verso un server 5.0 si riceverà plausibilmente in output una notifica del genere: Client does not support authentication protocol requested by server; consider upgrading MySQL client.
Nelle versioni precedenti alla 4.1, la codifica delle password tramite l'apposita funzione per l'hashing delle stringhe produceva output della lunghezza massima di 16 bytes, per cui le risultanti della codifica erano pari a stringhe di 16 caratteri:
mysql> SELECT PASSWORD('albero');
+--------------------+
| PASSWORD('albero') |
+--------------------+
| 0bb5355b56b4c6cb |
+--------------------+
A causa di questa impostazione anche la relativa colonna della tabella "user" era impostata per contenere un massimo di 16 caratteri (varchar(16)) per un tipo di dato stringa.
Con l'avvento della versione 4.1 la colonna "password" ha continuato ad ospitare anche stringhe della lunghezza di 16 caratteri, ma la funzione PASSWORD() è stata migliorata fino a riuscire a produrre output della lunghezza di 41 bytes:
mysql> SELECT PASSWORD('albero');
+-------------------------------------------+
| PASSWORD('albero') |
+-------------------------------------------+
| *7D69DA9FAAC2BF8B8181DCABB4E38B9DA1916389 |
+-------------------------------------------+
Va da sé che per sfruttare a pieno le nuove potenzialità della funzione PASSWORD() è necessario che il dato relativo alla parola chiave sia archiviato in una colonna che supporti l'inserimento di records della lunghezza di 41 bytes (varchar(41)).
La modifica alla lunghezza del campo "password" è stata introdotta di default nella versione 5.0 di MySQL, quindi nel caso di una installazione ex novo questa distribuzione creerà automaticamente un campo "password" in grado di archiviare stringhe da 41 bytes; nel caso invece si voglia operare un upgrade questo dovrà essere differente a seconda dei casi e delle versioni utilizzate, infatti mentre le versioni 4.1 e successive supportano il medesimo sistema di password hashing della 5.0, quelle precedenti si basano su un meccanismo più obsoleto.
Sarà quindi necessario aggiornare le versioni più datate prima alla 4.1 (o 4.1.x), per poi effettuare un ulteriore aggiornamento alla versione 5.0.
|
SQL Maintenance Solution: soluzione free per la manutenzione di SQL Server |
Guida AccessIniziare a sviluppare database grazie alla potenza visuale offerta... |
Guida SQL Server 2005L'RDBMS di Microsoft è uno dei più utilizzati, soprattutto in ambito... |
Guida OracleScoprire ed approfondire un dei più importanti RDBMS sulla scena... |
Ogni settimana, in due distinte newsletter: notizie a approfondimenti su MySQL, SQLserver e Oracle.
Iscriviti alla newsletter