web-dev-qa-db-fra.com

Comment restaurer les privilèges complets de l’utilisateur root MySQL?

J'ai accidentellement supprimé certains privilèges de mon utilisateur root MySQL, notamment la possibilité de modifier des tables. Existe-t-il un moyen de restaurer cet utilisateur dans son état d'origine (avec tous les privilèges)?

UPDATE mysql.user SET Grant_priv = 'Y', Super_priv = 'Y' WHERE User = 'root';
# MySQL returned an empty result set (i.e. zero rows).
FLUSH PRIVILEGES ;
# MySQL returned an empty result set (i.e. zero rows).


#1045 - Access denied for user 'root'@'localhost' (using password: YES)
GRANT ALL ON *.* TO 'root'@'localhost'
105
Steven

Si la GRANT ALL ne fonctionne pas, essayez:

  1. Arrêtez mysqld et redémarrez-le avec le --skip-grant-tables option.
  2. Connectez-vous au serveur mysqld avec juste: mysql (c.-à-d. No -p option, et nom d'utilisateur peuvent ne pas être nécessaires).
  3. Émettez les commandes suivantes dans le client mysql:

    UPDATE mysql.user SET Grant_priv='Y', Super_priv='Y' WHERE User='root';

    FLUSH PRIVILEGES;

Après cela, vous devriez pouvoir exécuter GRANT ALL ON *.* TO 'root'@'localhost'; et que ça marche.

143
DMI

Si vous avez supprimé votre utilisateur root par erreur, vous pouvez faire une chose:

  1. Arrêtez le service MySQL
  2. Courir mysqld_safe --skip-grant-tables &
  3. Tapez mysql -u root -p et appuyez sur enter.
  4. Tapez votre mot de passe
  5. Sur la ligne de commande mysql, entrez: use mysql;

Puis exécutez cette requête:

insert into `user` (`Host`, `User`, `Password`, `Select_priv`, `Insert_priv`, `Update_priv`, `Delete_priv`, `Create_priv`, `Drop_priv`, `Reload_priv`, `Shutdown_priv`, `Process_priv`, `File_priv`, `Grant_priv`, `References_priv`, `Index_priv`, `Alter_priv`, `Show_db_priv`, `Super_priv`, `Create_tmp_table_priv`, `Lock_tables_priv`, `Execute_priv`, `Repl_slave_priv`, `Repl_client_priv`, `Create_view_priv`, `Show_view_priv`, `Create_routine_priv`, `Alter_routine_priv`, `Create_user_priv`, `ssl_type`, `ssl_cipher`, `x509_issuer`, `x509_subject`, `max_questions`, `max_updates`, `max_connections`, `max_user_connections`) 
values('localhost','root','','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','','','','','0','0','0','0');

puis redémarrez le mysqld

EDIT: 6 octobre 2018

Au cas où quelqu'un d'autre aurait besoin de cette réponse, je l'ai essayée aujourd'hui avec innodb_version 5.6.36-82. et 10.1.24-MariaDB, et cela fonctionne si vous supprimez les liens en arrière (aucun cite soit, il suffit de les supprimer):

insert into user (Host, User, Password, Select_priv, Insert_priv, Update_priv, Delete_priv, Create_priv, Drop_priv, Reload_priv, Shutdown_priv, Process_priv, File_priv, Grant_priv, References_priv, Index_priv, Alter_priv, Show_db_priv, Super_priv, Create_tmp_table_priv, Lock_tables_priv, Execute_priv, Repl_slave_priv, Repl_client_priv, Create_view_priv, Show_view_priv, Create_routine_priv, Alter_routine_priv, Create_user_priv, ssl_type, ssl_cipher, x509_issuer, x509_subject, max_questions, max_updates, max_connections, max_user_connections) 
values('localhost','root','','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','','','','','0','0','0','0');
87
Bipin Bahuguna

je supprime également les privilèges de la base de données et de la racine qui ne s'affichent pas dans la console mysql quand j'étais utilisateur root, donc j'ai changé d'utilisateur de mysql>mysql -u 'userName' -p; et mot de passe;

UPDATE mysql.user SET Grant_priv='Y', Super_priv='Y' WHERE User='root';

FLUSH PRIVILEGES;

après cette commande, tout indique la base de données en racine.

Merci

23
Prabhu
GRANT ALL ON *.* TO 'user'@'localhost' with GRANT OPTION;

Connectez-vous simplement à partir de la racine en utilisant le mot de passe correspondant, le cas échéant, et exécutez simplement la commande ci-dessus, quel que soit l'utilisateur.

Par exemple:

GRANT ALL ON *.* TO 'root'@'%' with GRANT OPTION;
5
Rashendra - Rashen

Si vous utilisez WAMP sur votre ordinateur local (mysql version 5.7.14) Étape 1: ouvrez le fichier my.ini Étape 2: annulez la mise en commentaire de cette ligne 'skip-grant-tables' en supprimant le point-virgule étape 3: redémarrez mysql étape 4 du serveur: lancement de l’étape 5 de la console mySQL:

UPDATE mysql.user SET Grant_priv='Y', Super_priv='Y' WHERE User='root';
FLUSH PRIVILEGES;

Étape 6: Problème résolu !!!!

2
Terungwa

Il suffit d'insérer ou de mettre à jour mysql.user avec la valeur Y dans chaque colonne de privilèges.

Idem ci-dessus.

Réponse complète: http://www.myee.web.id/?p=869

2
user1316095

J'avais refusé les privilèges d'insertion et de rechargement à root. Ainsi, après la mise à jour des autorisations, FLUSH PRIVILEGES ne fonctionnait plus (faute de privilèges de rechargement). J'ai donc utilisé utilisateur debian-sys-maint sur Ubuntu 16.04 pour restaurer les privilèges user.root. Vous pouvez trouver le mot de passe de user.debian-sys-maint à partir de ce fichier

Sudo cat /etc/mysql/debian.cnf
2
Varun Kumar