193 votes

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

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

204voto

Xenph Yan Points 20883

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.

Lister 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 à

Arrêtez le processus MySQL

Démarrer 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.

8 votes

Je pense que vous n'avez pas besoin de redémarrer le démon pour réinitialiser les utilisateurs normaux. Il suffit de "FLUSH PRIVILEGES ;" après avoir mis à jour le mot de passe de l'utilisateur. --skip-grant-tables seulement nécessaire pour une réinitialisation du mot de passe de l'utilisateur Root ! Ceci n'est généralement pas recommandé pour une réinitialisation d'un utilisateur standard.

0 votes

Quelle est la signification de l'utilisation du dpkg-reconfigure mysql-server-5.5 pour réinitialiser le mot de passe de la racine de MySQL ?

0 votes

@Xenph, Pourquoi dites-vous " Démarrez le client de la console MySQL avec l'option -u Root " ? Il n'y a aucun intérêt à faire cela car -u est ignoré lorsque le serveur est démarré avec --skip-grant-tables .

48voto

jake Points 952

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 de créer un nouveau mot de passe.

Vous pouvez également utiliser la procédure suivante à partir de le manuel pour réinitialiser le mot de passe de n'importe quel serveur MySQL Racine 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 fonctionne comme un service Windows, allez à le gestionnaire de services :

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

Trouvez ensuite le service MySQL dans la liste, et arrêtez-le. Si votre serveur n'est pas exécuté 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 déclarations 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;

    El UPDATE y FLUSH Chaque déclaration doit être écrite sur une seule ligne. Le site UPDATE réinitialise le mot de passe de tous les comptes Root existants, et l'instruction FLUSH indique au serveur de recharger les tables d'attribution en mémoire.

  2. Sauvegarder 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 la commande spéciale --init-file option :

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

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

    Le serveur exécute le contenu du fichier nommé par la balise --init-file au démarrage, en changeant chaque Racine le mot de passe du compte.

    Vous pouvez également ajouter le --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 de MySQL, il se peut que vous deviez spécifier un nom de fichier --defaults-file option :

    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

    L'autorité compétente --defaults-file peut être trouvé en utilisant le gestionnaire de services :

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

    Trouvez le service MySQL dans la liste, faites un clic droit dessus et choisissez l'option Propriétés. Le champ "Path to executable" contient le --defaults-file réglage.

  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 de Windows. Si vous démarrez le serveur manuellement, utilisez la commande que vous utilisez normalement.

Vous devriez maintenant être en mesure de vous connecter à MySQL en tant que Root en utilisant le nouveau mot de passe.

6 votes

@Jake - merci pour la réponse. Je voulais lui donner un pouce en haut mais pour une raison quelconque stackoverflow ne me permet pas de le faire à cause des points de réputation. votre explication "malheureusement votre mot de passe d'utilisateur est irrécupérable. il a été haché avec un hachage à sens unique qui, si vous ne le savez pas, est irréversible" a été la clé pour comprendre pourquoi tout le reste que j'ai lu sur google m'a SEULEMENT donné les directions pour changement mon mot de passe. de bonnes explications sont plus perspicaces que des instructions seules.

1 votes

@jake je ne trouve pas mysql dans la liste des services S'il vous plaît dites-moi ce qu'il faut faire ?

1 votes

Pourquoi la vôtre mysqld-nt au lieu de mysqld ?

35voto

ThinkingMonkey Points 6309

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

1] Il n'est pas nécessaire 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.

utilice FLUSH PRIVILEGES; après l'instruction update 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.

El --skip-grant-options permet à quiconque de se connecter sans mot de passe et avec tous les privilèges. Étant donné que cela n'est pas sûr, vous pourriez vouloir

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

de : référence : réinitialisation des autorisations génériques

1 votes

@ThinkingMonkey, Cela ne suppose-t-il pas que l'utilisateur actuellement connecté a les privilèges pour modifier mysql.user ? Souvent, pourtant, ce n'est pas le cas.

9voto

S.M.Mousavi Points 704

Faites-le sans temps mort

Exécutez la commande suivante dans le Terminal pour vous connecter au SGBD (vous devez avoir un accès Root) :

sudo mysql -u root -p;

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

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

à ce stade, vous devez faire un flush pour appliquer les changements :

FLUSH PRIVILEGES;

C'est fait ! Vous l'avez fait sans avoir à arrêter ou redémarrer le service mysql.

6voto

snemarch Points 3328

Bien qu'il soit impossible de récupérer directement un mot de passe MySQL sans recourir à la force brute, il existe 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", c'est gagné.

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

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 vérifier ceci Fil conducteur de DonationCoder pour les sources et l'exécutable d'une implémentation rapide.

2 votes

C'était parfait. Il y a un exe avec le code source sur le fil de discussion mentionné par snemarch 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 les droits de lecture ou de mise à jour de la table des utilisateurs.

0 votes

Mais relativement parlant, très peu de gens utilisent Workbench.

0 votes

Voici une autre mise en œuvre 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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X