10
votes

Comment récupérer tous les privilèges à l'utilisateur root dans MySQL?

Je me suis connecté à MySQL avec l'option --Skip-Grant-Tables. Mais je ne sais pas comment récupérer tous les privilèges à l'utilisateur root.

J'ai essayé: p> xxx pré>

mysql dit: p>

# 1290 - The MySQL server is running with the --skip-grant-tables option so it cannot execute this statement


1 commentaires

Il semble y avoir une solution dans cette question / réponse Stackoverflow.com/Questtions/1709078/...


6 Réponses :


-10
votes

Pour exécuter une requête subvention , vous venez de ne pas exécuter mysql avec Skip-subventions-tables - Qu'est-ce qui est compliqué à ce sujet. ..?


4 commentaires

Il a besoin d'obtenir des privilèges root.


... Donc, il ne devrait pas utiliser skip-subventions-tables - pourquoi voudrait-il que et subvention ? Bien que j'avais aussi de vos travaux d'approche.


Il semble qu'il a oublié le mot de passe pour l'utilisateur root.


La question semble vouloir obtenir des drapeaux de privilège. Vous pouvez utiliser Skip-Subvention pour vous connecter. Mais vous ne pouvez pas accorder. Vous pouvez insérer une ligne dans MySQL.User pour une nouvelle ligne de subvention racine, mais la requête doit correspondre à de nombreuses colonnes de privilège. Un y / n pour chaque privilège.



5
votes

Lorsque vous exécutez MySQL en utilisant - Skip-Grant-Tables Code> MySQL ne vérifiera pas les autorisations. Donc, fondamentalement, vous pouvez faire n'importe quoi.

Pour récupérer les privilèges root, vous devez exécuter une requête dans MySQL code> dB comme ceci p> xxx pré>

juste pour vérifier si l'utilisateur root est toujours là Si OK: P>

UPDATE user SET Grant_priv = 1, Super_priv = 1 WHERE user = 'root'


1 commentaires

Dans Mariadb, la déclaration correcte est User User Set Set.priv = 'y', Super_priv = 'y', où utilisateur = 'root' , car il utilise Enum ('y', 'n'). Votre version d'origine a été exécutée, mais les valeurs de la table 'y' / 'n' non mises à jour, mais cette petite modification a fait le tour.



8
votes

Si vous ne pouvez pas accéder à MySQL Server en tant que racine, vous devez supprimer ou ne pas restaurer tous les enregistrements racines dans la table MySQL.User, supprimez-les tous et ajouter un nouvel enregistrement.

Vous devez utiliser MySQL Mot de passe (). hachage votre mot de passe ClearText. Vérifiez plus d'informations http://dev.mysql.com/doc /refman/5.1/fr/password-hashaing.html p>

Arrêtez le serveur MySQL et lancez MySQLD avec --Skip-Grant-Tables. P>

[root@mysql ~]# /etc/init.d/mysqld restart


2 commentaires

Si l'insertion a du mal à correspondre aux colonnes de privilège requises, voir la réponse ci-dessous. Copiez une ligne existante si vous n'avez besoin que d'une nouvelle subvention avec E.G. une autre colonne hôte autorisée.


Sélectionnez Mot de passe ('ClearText_Password'); Erreur 1064 (42000): Vous avez une erreur dans votre syntaxe SQL; Vérifiez le manuel qui correspond à votre version de Server MySQL pour la syntaxe droite à utiliser près de '(' ClearText_Password ')' à la ligne 1



6
votes

Premièrement, arrêtez le serveur MySQL, puis commencez-le avec l'option - Skip-Grant-tables CODE>.

mysql> flush privileges;
mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY '';
mysql> flush privileges;


2 commentaires

Si je me connecte en tant que root avec l'option Skip-Grant-Tables, je ne peux exécuter aucune déclaration. L'erreur est la suivante: "Le serveur MySQL est en cours d'exécution avec l'option --skip-subventions-tables afin qu'il ne puisse pas exécuter cette déclaration"


Dans ce cas, vous devez exécuter des privilèges de rinçage



1
votes

Si l'objectif de vos tables --Skip-Grant-tables insère une nouvelle subvention, vous pouvez le faire en insérant une ligne dans mysql.user (voir d'autres réponses)

si votre défi consiste à donner cette nouvelle subvention Tous les privilèges requis (de nombreuses colonnes Y / N), vous pouvez alors copier une subvention racine existante. Et ajustez seulement ce dont vous avez besoin. xxx


1 commentaires

Cette solution est géniale pour l'automatisation de l'environnement comme dans Vagrant.



16
votes

pour mysql 8.0.12 +
J'ai essayé la documentation (ne fonctionne pas) J'ai essayé diverses autres options, tous ont échoué.

Mot de passe () est obsolète, Set Mot de passe est désactivé, alter utilisateur est également désactivé.

  1. STOP MYSQL Service
  2. Commencez-le de cette façon: / usr / local / mysql / bin / mysqld_safe --Skip-Grant-tables
  3. Connexion (mySQL) et EXEC: Mettre à jour l'utilisateur Set authentification_string = '' Où utilisateur = 'root';
  4. killall mysqld
  5. Start Service à nouveau

    Vous pouvez maintenant utiliser Set de mot de passe ou alter utilisateur après vous connecter sans mot de passe


3 commentaires

C'est la réponse! Pourquoi le mot de passe () est-il obsolète? Si étrange.


@Mbrinson Le nombre d'étranges choses que j'ai remarquées avec MySQL est énorme. La vérité est que cela n'est pas maintenu professionnellement, il s'agit d'une combinaison de centaines de ticks laids. InnoDB est lent dans le comptage car MySQL n'utilise qu'un seul fil avec une latence énorme dans les cycles de traitement, quelle est la solution? Ils inventent un cache de résultats complexe. Avec MySQL 8, ils retirent le cache (enfreignant dix milliers d'applications) et inventent des multithreading, mais seulement multithreading pour des requêtes sans où, uniquement pour les comptes. Je pourrais donner d'innombrables exemples comme ceux-ci, il est maintenu par «Code Hackers».


Je reçois une erreur de base de données sélectionnée.