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'
Si la GRANT ALL
ne fonctionne pas, essayez:
mysqld
et redémarrez-le avec le --skip-grant-tables
option.mysqld
avec juste: mysql
(c.-à-d. No -p
option, et nom d'utilisateur peuvent ne pas être nécessaires).É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.
Si vous avez supprimé votre utilisateur root
par erreur, vous pouvez faire une chose:
mysqld_safe --skip-grant-tables &
mysql -u root -p
et appuyez sur enter.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');
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
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;
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 !!!!
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
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