Come posso recuperare il mio nome utente e la mia password MySQL?


158

Ho perso il nome utente e la password di MySQL. Come posso recuperarlo?

Risposte:


186

Ferma il processo MySQL.

Avviare il processo MySQL con l'opzione --skip-grant-tables.

Avviare il client della console MySQL con l'opzione -u root.

Elencare tutti gli utenti;

SELECT * FROM mysql.user;

Resetta la password;

UPDATE mysql.user SET Password=PASSWORD('[password]') WHERE User='[username]';

Ma NON DIMENTICARLO di

Ferma il processo MySQL

Avvia normalmente il processo MySQL (ovvero senza l'opzione --skip-grant-tables)

quando hai finito. Altrimenti, la sicurezza del database potrebbe essere compromessa.


7
Pensa di non aver bisogno di riavviare il demone per ripristinare i normali utenti. solo "FLUSH PRIVILEGES;" dopo aver aggiornato la password dell'utente. --skip-grant-tables è richiesto solo per reimpostare la password dell'utente root! Questo non è generalmente raccomandato per un ripristino utente standard.
Amos Folarin,

Qual è il significato dell'utilizzo del dpkg-reconfigure mysql-server-5.5comando per ripristinare la password di MySQL root?
phillipsK,

@Xenph, Perché dici " Avvia il client della console MySQL con l'opzione -u root "? Non ha senso farlo come -uviene ignorato all'avvio del server --skip-grant-tables.
Pacerier,

15
In MySQL 5.7. *, Non vi è alcuna colonna mysql.userchiamata password, usare authentication_stringinvece.
Adib Aroui

3
Ho trovato questo + stackoverflow.com/a/35277160/1604601 molto utile
Alien Life Form

42

Purtroppo la tua password utente è irrecuperabile. È stato eliminato con un hash unidirezionale che se non lo sai è irreversibile. Consiglio di andare con Xenph Yan sopra e crearne uno nuovo.

Puoi anche usare la seguente procedura dal manuale per reimpostare la password per qualsiasi account root MySQL su Windows:

  1. Accedere al sistema come amministratore.
  2. Arrestare il server MySQL se è in esecuzione. Per un server in esecuzione come servizio Windows, vai al gestore servizi:

Menu Start -> Pannello di controllo -> Strumenti di amministrazione -> Servizi

Quindi trova il servizio MySQL nell'elenco e fermalo. Se il server non è in esecuzione come servizio, potrebbe essere necessario utilizzare Task Manager per forzare l'arresto.

  1. Crea un file di testo e inserisci le seguenti istruzioni. Sostituisci la password con la password che desideri utilizzare.

    UPDATE mysql.user SET Password=PASSWORD('MyNewPass') WHERE User='root';
    FLUSH PRIVILEGES;

    Le istruzioni UPDATE e FLUSH devono essere scritte su un'unica riga. L' istruzione UPDATE reimposta la password per tutti gli account root esistenti e FLUSH istruzione indica al server di ricaricare le tabelle di concessione in memoria.

  2. Salva il file. Per questo esempio, il file verrà denominato C: \ mysql-init.txt.
  3. Apri una finestra della console per accedere al prompt dei comandi:

    Menu Start -> Esegui -> cmd

  4. Avviare il server MySQL con l' opzione speciale --init-file :

    C:\> C:\mysql\bin\mysqld-nt --init-file = C:\mysql-init.txt

    Se hai installato MySQL in una posizione diversa da C: \ mysql , modifica il comando di conseguenza.

    Il server esegue il contenuto del file denominato dal file --init dall'opzione all'avvio, modificando ogni password dell'account di root .

    Puoi anche aggiungere il opzione --console al comando se si desidera che l'output del server venga visualizzato nella finestra della console anziché in un file di registro.

    Se hai installato MySQL usando la procedura guidata di installazione di MySQL, potresti dover specificare un'opzione --defaults-file :

    C:\> "C:\Program Files\MySQL\MySQL Server 5.0\bin\mysqld-nt.exe" --defaults-file="C:\Program Files\MySQL\MySQL Server 5.0\my.ini" --init-file=C:\mysql-init.txt

    Il file --defaults appropriato impostazione può essere trovata usando Gestione servizi:

    Menu Start -> Pannello di controllo -> Strumenti di amministrazione -> Servizi

    Trova il servizio MySQL nell'elenco, fai clic con il pulsante destro del mouse su di esso e scegli l'opzione Proprietà. Il campo Percorso dell'eseguibile contiene il file --defaults impostazione .

  5. Dopo che il server è stato avviato correttamente, eliminare C: \ mysql-init.txt .
  6. Arrestare il server MySQL, quindi riavviarlo nuovamente in modalità normale. Se si esegue il server come servizio, avviarlo dalla finestra Servizi di Windows. Se si avvia il server manualmente, utilizzare qualunque comando si usi normalmente.

Ora dovresti essere in grado di connetterti a MySQL come root usando la nuova password.


5
@Jake - grazie per la risposta. Volevo dare un pollice in su, ma per qualche ragione StackOverflow non mi permette di farlo a causa dei punti reputazione. la tua spiegazione "purtroppo la tua password utente è irrecuperabile. È stata cancellata con un hash unidirezionale che se non lo sai è irreversibile" è stata la chiave della mia comprensione del perché tutto il resto che ho letto su Google mi ha dato SOLO indicazioni per cambiare il mio parola d'ordine. le buone spiegazioni sono più approfondite delle sole istruzioni.
dsdsdsdsd,

1
@jake non riesco a trovare mysql nell'elenco dei servizi. Per favore, dimmi cosa devo fare?

1
Perché è tuo mysqld-ntinvece di mysqld?
Pacerier,

A proposito, c'è un'opzione non file di --init-file? (Qualcosa di simile al --executecomando di mysql.exe .)
Pacerier

34

Un miglioramento alla risposta più utile qui:

1] Non è necessario riavviare il server mysql
2] Problemi di sicurezza per un server MySQL collegato a una rete

Non è necessario riavviare il server MySQL.

utilizzare FLUSH PRIVILEGES;dopo l'aggiornamento dell'istruzione mysql.user per la modifica della password.

L'istruzione FLUSH indica al server di ricaricare le tabelle di concessione in memoria in modo che noti la modifica della password.

La --skip-grant-optionspermette a chiunque di connettersi senza una password e con tutti i privilegi. Perché questo è insicuro, potresti volerlo

usare --skip-grant-tables insieme a --skip-networking per impedire ai client remoti di connettersi.

da: riferimento: resetting-autorizzazioni-generico


@ThinkingMonkey, Questo non presuppone che l'utente attualmente connesso abbia i privilegi da modificare mysql.user? Spesso, tuttavia, non è così.
Pacerier,

6

Sebbene non sia possibile ripristinare direttamente una password MySQL senza il bruteforcing, potrebbe esserci un altro modo: se hai utilizzato MySQL Workbench per collegarti al database e hai salvato le credenziali nel "vault", sei d'oro.

Su Windows, le credenziali sono archiviate in % APPDATA% \ MySQL \ Workbench \ workbench_user_data.dat - crittografato con CryptProtectData (senza alcuna entropia aggiuntiva). Decifrare è facile:

std::vector<unsigned char> decrypt(BYTE *input, size_t length) {
    DATA_BLOB inblob { length, input };
    DATA_BLOB outblob;

    if (!CryptUnprotectData(&inblob, NULL, NULL, NULL, NULL, CRYPTPROTECT_UI_FORBIDDEN, &outblob)) {
            throw std::runtime_error("Couldn't decrypt");
    }

    std::vector<unsigned char> output(length);
    memcpy(&output[0], outblob.pbData, outblob.cbData);

    return output;
}

Oppure puoi dare un'occhiata a questo thread DonationCoder per sorgente + eseguibile di un'implementazione rapida e sporca.


2
Questo è stato perfetto C'è un exe con codice sorgente sul thread snemarch menzionato per recuperare la password del mio account utente memorizzata nel mio vault di MySQL Workbench. Anche se questi altri metodi probabilmente funzionerebbero anche se avessi i diritti per leggere o aggiornare la tabella degli utenti.
RobbZ,

Ma relativamente parlando, pochissime persone usano Workbench.
Pacerier,

Ecco un'altra implementazione che può essere eseguita dopo la
compilazione

6

Fallo senza tempi morti

Eseguire il comando seguente nel Terminale per connettersi al DBMS (è necessario l'accesso root):

sudo mysql -u root -p;

esegui la password di aggiornamento dell'utente di destinazione (per esempio il mio nome utente è mousavie la password deve essere 123456):

UPDATE mysql.user SET authentication_string=PASSWORD('123456') WHERE user='mousavi';  

a questo punto è necessario eseguire un flush per applicare le modifiche:

FLUSH PRIVILEGES;

Fatto! Lo hai fatto senza alcun arresto o riavvio del servizio mysql.


5

Se si dispone dell'accesso root al server su cui è in esecuzione mysql, è necessario arrestare il server mysql utilizzando questo comando

sudo service mysql stop

Ora avvia mysql usando questo comando

sudo /usr/sbin/mysqld --skip-grant-tables  --skip-networking &

Ora puoi accedere a mysql usando

sudo mysql
FLUSH PRIVILEGES;
SET PASSWORD FOR 'root'@'localhost' = PASSWORD('MyNewPass');

Le istruzioni complete sono disponibili qui http://www.techmatterz.com/recover-mysql-root-password/


3

Accedi a MySql da Windows cmd utilizzando l'utente esistente:

mysql -u username -p
Inserisci la password: ****

Quindi eseguire il comando seguente:

mysql> SELECT * FROM mysql.user;

Dopo quella copia della password md5 crittografata per l'utente corrispondente e ci sono diverse applicazioni online decifrate password disponibili nel web. Utilizzando questa password di decrittografia e utilizzarla per l'accesso la prossima volta. o aggiorna la password utente usando il comando flow:

mysql> UPDATE mysql.user SET Password=PASSWORD('[password]') WHERE User='[username]';

Quindi accedi utilizzando la nuova password e l'utente.


0

Se hai ODBC impostato, puoi ottenere la password dal file di configurazione ODBC. Questo è in /etc/odbc.ini per Linux e nella cartella Software / ODBC nel registro di Windows (ce ne sono diversi - potrebbe volerci un po 'di caccia)


0

Salva il file. Per questo esempio, il file si chiamerà C: \ mysql-init.txt. chiedendo autorizzazioni amministrative per il salvataggio del file


-1

Sebbene un'interpretazione rigorosa, logica e informatica della domanda dell'operazione sarebbe quella di richiedere sia "Come recuperare il mio nome utente MySQL" sia "password" - ho pensato che potesse essere utile a qualcuno rivolgersi anche all'OR all'interpretazione . In altre parole ...

1) Come posso recuperare il mio nome utente MySQL?

O

2) password

Quest'ultima condizione sembra essere già stata ampiamente risolta, quindi non mi preoccuperò. Quella che segue è una soluzione per il caso "Come posso recuperare il mio nome utente MySQL" da solo. HIH.

Per trovare il tuo nome utente mysql, esegui i seguenti comandi dalla shell mysql ...

SELEZIONA Utente DA mysql.user;

stamperà una tabella di tutti gli utenti mysql.


1
Questa è una risposta tardiva e dovresti pubblicarla solo se la tua soluzione è chiaramente diversa da quella già pubblicata o accettata. Non è in questo caso, in particolare che la tua risposta ne duplica una accettata.
m.cekiera,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.