MySQL: Recupera la password di root
by Valentino R.
Ultimo Aggiornamento 11 Febbraio 2004
A chi serve
Con il presente articolo, si vuole dare un aiuto a quanti hanno una memoria "corta". Infatti, molte volte capita che
avendo dei database ben strutturati e quindi ben funzionanti, non abbiamo necessità di effettuare nuove modifiche agli
stessi e quindi può capitare che con il tempo ci potremmo dimenticare la necessaria password dell'utente "root"
Informazioni necessarie
Come tutti sapete, MySQL è un database server organizzato in modo tale che è possibile creare vari utenti per vari
database. Però, in MySQL esiste un utente amministratore, e cioè l'utente denominato "root" che ha di default
impostato i privilegi per poter "dominare" all'interno del database server.
Questa procedura, che successivamente illustreremo, consente anche di cambiare, non solo la password di root, ma bensì
qualunque altra password presente all'interno del database server, e di alterare qualsiasi informazione presente
all'interno dei database.
Le password degli utenti del database server sono conservate all'interno del database denominato "mysql", e precisamente
all'interno della tabella "user", insieme anche ad altre informazioni relative all'user.
La cosa più semplice sarebbe quella di andare a sbirciare all'interno della tabella e vedere quale sia la password.
Molto semplice no!?!?
Il problema è che non è possibile.
1 - Le password degli utenti non esistono! O meglio, quando sono state settate le password di queste
ultime sono state archiviate le firme digiatli. Infatti, all'atto dell'autenticazione per la connessione al nostro
database, il database server non fa altro che generare una nuova firma digitale con la stringa da noi immessagli
e confrontarla con quella archiviata. Quindi senza effettuare alcuna decriptazione della stringa archiviata;
2 - Il database "mysql" è possibile consultarlo solo se si hanno i privilegi dell'utente "root".
Cosa fondamentale per eseguire questa operazione, è quella di avere almeno i privilegi necessari per stoppare e
successivamente riavviare il demone del database server.
A lavoro
Come prima cosa bisogna stoppare il database server.
# =====================
# In Windows NT/2000/XP
# =====================
shell> net stop mysql
# =====================
# In ambiente Unix Like
# =====================
shell> kill `cat /mysql-data-directory/hostname.pid`
|
Riavviare il databse server
Riavviare il database server con l'opzione "--skip-grant-tables".
# =================================
# In Windows NT/2000/XP e Unix Like
# =================================
shell> mysqld --skip-grant-tables
|
Questa opzione, consente di avviare il database server senza effettuando lo ''skip'' del caricamento della tabella dei dei privilegi.
Cio darà la possibilità di accedere a tutti i databases senza rispettare i privilegi, quindi ''tutto a tutti'', comprese le tabelle del database mysql.
Cambiare la password.
# =============================================
# In Windows NT/2000/XP e in ambiente Unix Like
# =============================================
shell> mysqladmin -h -u root password ''
# ========================
# oppure
# ========================
shell> mysql -u root -D mysql
mysql> UPDATE user SET Password=PASSWORD('mynewpassword') WHERE User='root';
mysql> FLUSH PRIVILEGES;
|
Riavvio
A questo punto basta riavviare il database server senza la precedente opzione. Quando verrà richiesta la password per
l'utente "root", basta inserire la nuova password e tutto funzionerà correttamente.