En raison de problèmes, j'ai décidé de recréer tous les utilisateurs à l'exception de root@localhost
. Cela fonctionne bien, mais l'utilisateur nouvellement créé n'a aucun droit de faire quoi que ce soit. Ce que je veux, c'est simplement donner tous les droits de root sur une IP locale. J'ai (comme root@localhost
) essayé
CREATE USER 'root'@'10.0.3.210';
GRANT ALL ON *.* TO 'root'@'10.0.3.210';
La première commande fonctionne, la seconde échoue avec le message
ERROR 1045 (28000): Access denied for user 'root'@'localhost'
Je ne comprends pas pourquoi je ne root@localhost
peux pas tout faire, je suis sûr que je n'ai pas dérangé avec ses privilèges. De
SHOW GRANTS FOR 'root'@'localhost'
Je reçois
Grants for root@localhost
GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, RELOAD, SHUTDOWN, PROCESS, FILE, REFERENCES, INDEX, ALTER, SHOW DATABASES, SUPER, CREATE TEMPORARY TABLES, REPLICATION SLAVE, REPLICATION CLIENT, CREATE USER ON *.* TO 'root'@'localhost' WITH GRANT OPTION
GRANT ALL PRIVILEGES ON `%`.* TO 'root'@'localhost' WITH GRANT OPTION
quoi que cela signifie. Me manque-t-il un privilège nécessaire? Peut-il être réparé?
Je travaille avec mysql Ver 14.14 Distrib 5.1.61, pour debian-linux-gnu (x86_64).
mysql
permissions
maaartinus
la source
la source
GRANT SELECT ON *.* TO 'root'@'10.0.3.210';
?Réponses:
Oh mon Dieu, je pense que le problème vient du mélange du schéma mysql des différentes versions de mysql. Tout d'abord, exécutez cette requête:
Pour MySQL 5.6, vous obtenez 43 colonnes
Pour MySQL 5.5, vous obtenez 42 colonnes
Pour MySQL 5.1, vous obtenez 39 colonnes
Pour MySQL 5.0, vous obtenez 37 colonnes
Pour MySQL 4.x, vous obtenez 31 colonnes
Imaginez ce scénario:
Les autorisations utilisateur commencent à être décalées. Chaque fois que vous exécutez
SHOW GRANTS;
, il est câblé d'attendre des colonnes à des emplacements spécifiques dans mysql.user (étant donné que mysql.user est un MyISAM et que son ROW_FORMAT est Dynamic (par défaut)). Il est très facile de voir un utilisateur perdre soudainement des autorisations lorsque vous rechargez une version MySQL 5.0 de mysql.user dans une instance MySQL 5.1.À l'avenir, si vous décidez de recharger des utilisateurs dans MySQL, essayez de vider les utilisateurs dans un fichier texte en utilisant pt-show-grant plutôt que mysqldump.
J'ai en fait écrit ma propre version de pt-show-grant comme suit:
Cela produira toutes les autorisations utilisateur en tant que SQL, ce qui est beaucoup plus portable que les techniques mysql standard. Rechargez simplement le script SQL et les GRANTS sont exécutés. Bien sûr, un tel rechargement n'est compatible que vers l'avant, jamais vers l'arrière.
la source
Le commentaire de
gbn
m'a amené à la solution: je ne sais pas comment cela est arrivé, maisroot@localhost
il manquait quelques privilèges. Alors commencez par les obtenir tous viaIl y a pas mal de colonnes, donc en utilisant quelque chose comme
peut économiser pas mal de frappe.
FLUSH PRIVILEGES
Est probablement nécessaire après les MISES À JOUR. Une fois que j'ai tous les privilèges, je peux aussi les accorder.la source
J'ai vu un problème où vous ne pouvez pas
GRANT CREATE TABLESPACE
.Cependant, je ne suis pas sûr de tous les détails et je l'ai vu sur 5.5 / Solaris
Mon commentaire ci-dessus et votre réponse indiquent que cela peut s'appliquer ici. Autrement dit, vous pouvez tout octroyer, sauf les
CREATE TABLESPACE
autorisationsla source
Comme @RolandoMYSQLDBA a correctement déclaré, ce problème est dû à la mise à niveau de votre version MySQL tout en conservant les fichiers plus anciens (sans dumping / restauration). @gbn a également conclu à juste titre que cela est lié à la
CREATE TABLESPACE
privilège qui a été ajouté dans MySQL 5.5. Vous avez probablement des fichiers de base de données de MySQL 5.1.La solution simple (qui est également documentée dans le manuel de référence de MySQL ) est de s'exécuter
mysql_upgrade
tout en sautant éventuellement laGRANT
vérification des tables:la source