Comment récupérer mon nom d'utilisateur et mon mot de passe MySQL?

158

J'ai perdu mon nom d'utilisateur et mon mot de passe MySQL. Comment le récupérer?

Marcel
la source

Réponses:

186

Arrêtez le processus MySQL.

Démarrez le processus MySQL avec l'option --skip-grant-tables.

Démarrez le client de la console MySQL avec l'option -u root.

Listez tous les utilisateurs;

SELECT * FROM mysql.user;

Réinitialiser le mot de passe;

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

Mais N'OUBLIEZ PAS de

Arrêtez le processus MySQL

Démarrez le processus MySQL normalement (c'est-à-dire sans l'option --skip-grant-tables)

lorsque vous avez terminé. Sinon, la sécurité de votre base de données pourrait être compromise.

Xenph Yan
la source
7
Pensez que vous n'avez pas besoin de redémarrer le démon pour réinitialiser les utilisateurs normaux. juste "FLUSH PRIVILEGES;" après avoir mis à jour le mot de passe utilisateur. --skip-grant-tables n'est requis que pour une réinitialisation du mot de passe de l'utilisateur root! Cela n'est généralement pas recommandé pour une réinitialisation utilisateur standard.
Amos Folarin
Quelle est la signification de l'utilisation de la dpkg-reconfigure mysql-server-5.5commande pour réinitialiser le mot de passe root MySQL?
phillipsK
@Xenph, pourquoi dites-vous " Démarrez le client de la console MySQL avec l'option -u root "? Cela ne -usert à rien de le faire car il est ignoré lorsque le serveur est démarré avec --skip-grant-tables.
Pacerier
15
Dans MySQL 5.7. *, Il n'y a pas de colonne mysql.userappelée password, utilisez à la authentication_stringplace.
Adib Aroui
3
J'ai trouvé ceci + stackoverflow.com/a/35277160/1604601 très utile
Alien Life Form
42

Malheureusement, votre mot de passe utilisateur est irrécupérable. Il a été haché avec un hachage à sens unique qui, si vous ne le savez pas, est irréversible. Je recommande d'aller avec Xenph Yan ci-dessus et d'en créer un nouveau.

Vous pouvez également utiliser la procédure suivante du manuel pour réinitialiser le mot de passe de tout compte racine MySQL sous Windows:

  1. Connectez-vous à votre système en tant qu'administrateur.
  2. Arrêtez le serveur MySQL s'il est en cours d'exécution. Pour un serveur qui s'exécute en tant que service Windows, accédez au gestionnaire de services:

Menu Démarrer -> Panneau de configuration -> Outils d'administration -> Services

Recherchez ensuite le service MySQL dans la liste et arrêtez-le. Si votre serveur ne fonctionne pas en tant que service, vous devrez peut-être utiliser le Gestionnaire des tâches pour le forcer à s'arrêter.

  1. Créez un fichier texte et placez-y les instructions suivantes. Remplacez le mot de passe par le mot de passe que vous souhaitez utiliser.

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

    Les instructions UPDATE et FLUSH doivent chacune être écrites sur une seule ligne. L' instruction UPDATE réinitialise le mot de passe de tous les comptes racine existants et l' instruction FLUSH indique au serveur de recharger les tables d'octroi en mémoire.

  2. Enregistrez le fichier. Pour cet exemple, le fichier sera nommé C: \ mysql-init.txt.
  3. Ouvrez une fenêtre de console pour accéder à l'invite de commande:

    Menu Démarrer -> Exécuter -> cmd

  4. Démarrez le serveur MySQL avec l' option spéciale --init-file :

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

    Si vous avez installé MySQL à un emplacement autre que C: \ mysql , ajustez la commande en conséquence.

    Le serveur exécute le contenu du fichier nommé par l' option --init-file au démarrage, en modifiant le mot de passe de chaque compte root .

    Vous pouvez également ajouter l' option --console à la commande si vous souhaitez que la sortie du serveur apparaisse dans la fenêtre de la console plutôt que dans un fichier journal.

    Si vous avez installé MySQL à l'aide de l'assistant d'installation MySQL, vous devrez peut-être spécifier une option --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

    Le paramètre --defaults-file approprié peut être trouvé à l'aide du Gestionnaire de services:

    Menu Démarrer -> Panneau de configuration -> Outils d'administration -> Services

    Recherchez le service MySQL dans la liste, cliquez dessus avec le bouton droit de la souris et choisissez l'option Propriétés. Le champ Chemin d'accès à l'exécutable contient le paramètre --defaults-file .

  5. Une fois que le serveur a démarré avec succès, supprimez C: \ mysql-init.txt .
  6. Arrêtez le serveur MySQL, puis redémarrez-le en mode normal. Si vous exécutez le serveur en tant que service, démarrez-le à partir de la fenêtre Services Windows. Si vous démarrez le serveur manuellement, utilisez la commande que vous utilisez normalement.

Vous devriez maintenant pouvoir vous connecter à MySQL en tant que root en utilisant le nouveau mot de passe.

jake
la source
5
@Jake - merci pour la réponse. Je voulais lui donner un coup de pouce, mais pour une raison quelconque, stackoverflow ne me permettra pas de le faire à cause des points de réputation. votre explication "malheureusement, votre mot de passe utilisateur est irrécupérable. il a été haché avec un hachage à sens unique qui, si vous ne savez pas, est irréversible" a été la clé pour comprendre pourquoi tout ce que j'ai lu sur google m'a donné UNIQUEMENT des instructions pour changer mon mot de passe. les bonnes explications sont plus perspicaces que les instructions seules.
dsdsdsdsd le
1
@jake je ne trouve pas mysql dans la liste des services Veuillez me dire quoi faire?
1
Pourquoi est le vôtre mysqld-ntau lieu de mysqld?
Pacerier
Btw, existe-t-il une option non-fichier de --init-file? (Quelque chose de similaire à la --executecommande de mysql.exe .)
Pacerier
34

Une amélioration de la réponse la plus utile ici:

1] Pas besoin de redémarrer le serveur mysql
2] Problème de sécurité pour un serveur MySQL connecté à un réseau

Il n'est pas nécessaire de redémarrer le serveur MySQL.

utiliser FLUSH PRIVILEGES;après l'instruction de mise à jour mysql.user pour le changement de mot de passe.

L'instruction FLUSH indique au serveur de recharger les tables d'octroi en mémoire afin qu'il remarque le changement de mot de passe.

Le --skip-grant-optionspermet à quiconque de se connecter sans mot de passe et avec tous les privilèges. Parce que ce n'est pas sûr, vous voudrez peut-être

utilisez --skip-grant-tables en conjonction avec --skip-networking pour empêcher les clients distants de se connecter.

from: reference: resetting-permissions-generic

PenserMonkey
la source
@ThinkingMonkey, cela ne suppose-t-il pas que l'utilisateur actuellement connecté a des privilèges à modifier mysql.user? Cependant, ce n'est souvent pas le cas.
Pacerier
6

Bien que vous ne puissiez pas récupérer directement un mot de passe MySQL sans brutforcing, il pourrait y avoir un autre moyen - si vous avez utilisé MySQL Workbench pour vous connecter à la base de données et que vous avez enregistré les informations d'identification dans le «coffre-fort», vous êtes en or.

Sous Windows, les informations d'identification sont stockées dans % APPDATA% \ MySQL \ Workbench \ workbench_user_data.dat - cryptées avec CryptProtectData (sans aucune entropie supplémentaire). Le décryptage est un jeu d'enfant:

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;
}

Ou vous pouvez consulter ce fil DonationCoder pour la source + l'exécutable d'une implémentation rapide et sale.

snemarch
la source
2
C'était parfait. Il existe un exe avec le code source sur le fil snemarch mentionné pour récupérer le mot de passe de mon compte utilisateur stocké dans mon coffre-fort MySQL Workbench. Bien que ces autres méthodes fonctionneraient probablement aussi si j'avais le droit de lire ou de mettre à jour la table des utilisateurs.
RobbZ
Mais relativement parlant, très peu de gens utilisent Workbench.
Pacerier
Voici une autre implémentation qui peut être exécutée après la construction avec Visual Studio pour récupérer les informations de nom d'utilisateur et de mot de passe stockées de Workbench: github.com/wclear/MySQLWorkbenchPasswordViewer
bnp887
6

Faites-le sans temps d'arrêt

Exécutez la commande suivante dans le terminal pour vous connecter au SGBD (vous avez besoin d'un accès root):

sudo mysql -u root -p;

exécuter le mot de passe de mise à jour de l'utilisateur cible (pour mon exemple, le nom d'utilisateur est mousaviet son mot de passe doit être 123456):

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

à ce stade, vous devez effectuer un vidage pour appliquer les modifications:

FLUSH PRIVILEGES;

Terminé! Vous l'avez fait sans aucun arrêt ou redémarrage du service mysql.

SMMousavi
la source
5

Si vous avez un accès root au serveur sur lequel mysql est en cours d'exécution, vous devez arrêter le serveur mysql en utilisant cette commande

sudo service mysql stop

Maintenant, lancez mysql en utilisant cette commande

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

Vous pouvez maintenant vous connecter à mysql en utilisant

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

Des instructions complètes peuvent être trouvées ici http://www.techmatterz.com/recover-mysql-root-password/

Sajjad Ashraf
la source
3

Connectez-vous à MySql à partir de Windows cmd en utilisant l'utilisateur existant:

mysql -u nom d'utilisateur -p
Entrez le mot de passe: ****

Exécutez ensuite la commande suivante:

mysql> SELECT * FROM mysql.user;

Après cette copie du mot de passe md5 crypté pour l'utilisateur correspondant et il existe plusieurs applications décryptées par mot de passe en ligne disponibles sur le Web. Utilisez ce mot de passe de déchiffrement et utilisez-le pour vous connecter la prochaine fois. ou mettez à jour le mot de passe de l'utilisateur à l'aide de la commande fluide:

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

Puis connectez-vous en utilisant le nouveau mot de passe et l'utilisateur.

Islam syeful
la source
0

SI vous avez configuré ODBC, vous pouvez obtenir le mot de passe à partir du fichier de configuration ODBC. C'est dans /etc/odbc.ini pour Linux et dans le dossier Software / ODBC dans le registre de Windows (il y en a plusieurs - cela peut prendre un peu de chasse)

sampleize1
la source
0

Enregistrez le fichier. Pour cet exemple, le fichier sera nommé C: \ mysql-init.txt. il demande des autorisations administratives pour enregistrer le fichier

user12261119
la source
-1

Bien qu'une interprétation stricte, logique et informatique de la question de l'OP consisterait à exiger à la fois "Comment récupérer mon nom d'utilisateur MySQL" et "mot de passe" - j'ai pensé qu'il pourrait être utile à quelqu'un d'aborder l' interprétation OR . En d'autres termes ...

1) Comment récupérer mon nom d'utilisateur MySQL?

OU

2) mot de passe

Cette dernière condition semble avoir déjà été amplement traitée, donc je ne m'en soucierai pas. Ce qui suit est une solution pour le cas "Comment récupérer mon nom d'utilisateur MySQL" seul. HIH.

Pour trouver votre nom d'utilisateur mysql, exécutez les commandes suivantes à partir du shell mysql ...

SELECT User FROM mysql.user;

il imprimera un tableau de tous les utilisateurs de mysql.

éclat
la source
1
Il s'agit d'une réponse tardive et vous ne devez les publier que si votre solution est clairement différente de celle déjà publiée ou acceptée. Ce n'est pas dans ce cas, surtout que votre réponse duplique une réponse acceptée.
m.cekiera le