J'ai des problèmes très étranges avec mon utilisateur root mysql (5.5). J'essaie d'autoriser un hôte externe d'accéder à l'utilisateur root, mais il semble que ma root @ localhost n'a pas de "option de subvention" aux bases de données locales! Je pense que la question à ce stade est causée par le fait que je pense avoir deux utilisateurs de racine @ localhost, à la fois avec des règles de subvention différentes, mais je ne peux pas comprendre comment revenir à mon installation.
J'ai déjà essayé de supprimer l'utilisateur root et de le recréer (je pense), réinitialisant le mot de passe des utilisateurs racines (modifier la base de données MySQL elle-même)
Je ne peux pas entrer dans le compte root à l'aide du mot de passe que j'ai toujours spécifié mais plutôt un mot de passe alternatif, que je ne sais même pas comment j'ai eu ... Cet utilisateur alternatif est celui qui ne semble pas avoir plein Autorisations racines, mais est encore appelée racine.
--Solution posté ci-dessous--
Trouvé la solution - Ceci est causé par la mise à jour de MySQL à partir de MySQL 5.1 à MySQL 5.5 et en déplaçant le schéma d'authentification (la base de données MySQL elle-même) avec elle. Comme il existe des mises à jour de base de ce schéma à l'aide d'une base de données 5.5 ne fonctionnera tout simplement pas à deux bugs principaux: impossible d'accorder des privilèges en tant qu'utilisateurs Root MySQL supprimés.
Vous pouvez démarrer MySQL avec l'authentification désactivée. De là, vous pouvez créer/supprimer le compte administratif de MySQL.
Les détails que vous pouvez trouver dans la documentation MySQL: http://dev.mysql.com/doc/refman/5.0/fr/Resetting-permissions.html
mysqld --skip-grant-tables --skip-networking
Dans MySQL Run:
Mettez à jour MySQL.User Set Mot de passe = Mot de passe ('MyNewPass') où User = 'root';
Accorder tous les privilèges sur . à "racine" @ "localhost" avec option de subvention;
Arrêter mysql
Essayez d'accéder au serveur avec 'root''@'127.0.0.1' qui est différent de "root" @ 'localhost'. Ensuite, émettez une commande pour créer l'utilisateur 'root' @ 'localhost' et accorder tous les privilèges à celui-ci
Voici les quelques étapes que j'ai suivies sur le système Windows
use mysql;
UPDATE mysql.user SET PASSWORD=PASSWORD('MyNewPass') WHERE USER='root';
FLUSH PRIVILEGES;
GRANT ALL ON *.* TO 'root'@'localhost';
déconnectez-vous de l'utilisateur, puis connectez-vous à la racine à l'aide du nouveau mot de passe ci-dessus sur les étapes fonctionnant pour moi
Taper SHOW GRANTS FOR 'root'@'localhost';
m'a montré un mot de passe obscurci, donc je me suis connecté à MySQL de ce système à l'aide de Heidisql sur un autre système (en utilisant root
comme nom d'utilisateur et le mot de passe correspondant) et saisi
[.____] GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' IDENTIFIED BY 'thepassword' WITH GRANT OPTION;
et cela a fonctionné lorsque je suis retourné au système et je me suis connecté en utilisant
[.____] mysql -uroot -pthepassword;
Vous devez supprimer la racine supplémentaire @ localhost Entrée. Cela peut être fait soit avec les "tables de subventions" telles que suggérées par Mircea Vutcovici, soit en une session normale (locale ou distante) si vous pouvez toujours accéder en tant que root.
Essayez quelque chose comme ça:
#get to admin tables
use mysql
#confirm the differences for the root entries
select Host, user, grant_priv from user where user = 'root';
#adjust as needed
delete from user where user = 'root' and Host = 'localhost' and grant_priv = 'N';
#commit
flush privileges;
Mise à jour: Selon la sortie que vous avez montrée pour le test SELECT, il n'apparaît pas que vous avez un problème avec plusieurs racines avec différentes racines_privs. Par conséquent, si les conseils donnés par Mircea Vutcovici ne résolvent pas votre problème, je pourrais deviner que le problème réel menace avec Root Prishs. Peut-être que vous faites autre chose, comme essayer de vous connecter à un hôte incorrect ou à l'aide d'un mot de passe enregistré dans un fichier de configuration (.MY.CNF). En d'autres termes, vous devrez peut-être être plus précis.