J'avais l'habitude d'accéder très bien à l'utilisateur root dans MySQL. Mais récemment, je n'en suis plus capable.
Je peux me connecter correctement:
mysql -u root -p
Voici l'état de mysql après la connexion:
mysql> status
--------------
mysql Ver 14.14 Distrib 5.5.28, for debian-linux-gnu (i686) using readline 6.2
Connection id: 37
Current database:
Current user: root@localhost
SSL: Not in use
Current pager: stdout
Using outfile: ''
Using delimiter: ;
Server version: 5.5.28-0ubuntu0.12.04.3 (Ubuntu)
Protocol version: 10
Connection: Localhost via UNIX socket
Server characterset: latin1
Db characterset: latin1
Client characterset: utf8
Conn. characterset: utf8
UNIX socket: /var/run/mysqld/mysqld.sock
Uptime: 4 min 16 sec
Threads: 1 Questions: 112 Slow queries: 0 Opens: 191
Flush tables: 1 Open tables: 6 Queries per second avg: 0.437
--------------
Mais quand je veux faire une action, telle que:
mysql> CREATE DATABASE moyennegenerale;
ERROR 1044 (42000): Access denied for user 'root'@'%' to database 'moyennegenerale'
Je comprends %
est utilisé pour signifier tout hôte, mais mon statut indique clairement localhost. Quelqu'un a-t-il une idée de ce qui pourrait se passer?
Je pense que vous avez des utilisateurs anonymes
Essayez d'exécuter ceci:
SELECT user,Host,password FROM mysql.user WHERE user='';
Cela montrera quels utilisateurs anonymes existent. Très probablement, vous verrez une ligne avec un utilisateur vide, Host %
, Et un mot de passe vide comme indiqué ci-dessous:
mysql> select user,Host,password from mysql.user;
+-----------+-------------+-------------------------------------------+
| user | Host | password |
+-----------+-------------+-------------------------------------------+
| lwdba | 127.0.0.1 | *xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx |
| lwdba | localhost | *xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx |
| lwdba | % | *xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx |
| root | localhost | *xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx |
| root | 127.0.0.1 | *xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx |
| Vanilla | localhost | |
| mywife | % | |
| | % | | <<<--- LOOK !!!
| replicant | 10.64.113.% | *xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx |
| kumar | % | |
+-----------+-------------+-------------------------------------------+
Alors, comment vous êtes-vous connecté? Exécutez cette requête:
SELECT USER(),CURRENT_USER();
La deuxième fonction CURRENT_USER()
révèle comment l'utilisateur anonyme a été utilisé pour se connecter.
Veuillez exécuter
SHOW GRANTS;
Cela dévoilera les privilèges dont vous disposiez au moment de votre connexion. Le fait que vous ayez été empêché de créer une base de données montre que vous n'étiez pas root mais un utilisateur disposant de privilèges inférieurs.
Veuillez nettoyer vos subventions utilisateur.
Feb 17, 2012
: MySQL: Pourquoi y a-t-il des entrées "test" dans mysql.db?Feb 17, 2012
: A quoi sert la table mysql.db?Jan 18, 2012
: erreur MySQL: accès refusé à l'utilisateur 'a' @ 'localhost' (en utilisant le mot de passe: OUI)En ce qui concerne la réinitialisation du mot de passe root, veuillez procéder comme suit:
echo "SET PASSWORD FOR root@localhost=PASSWORD('password');" > /var/lib/mysql/rootpwd.sql
service mysql restart
rm -f /var/lib/mysql/rootpwd.sql
J'ai appris cette méthode efficace de @ShlomiNoach .
Essaie !!!
Je sais ce que tu as fait.
Faites ceci:
SELECT `User`, `Grant_priv` FROM `mysql`.`user` WHERE `User` = 'root';
Vous remarquerez probablement qu'il renvoie un "N" pour Grant_priv. Faites donc ceci:
UPDATE `mysql`.`user` SET `Grant_priv` = 'Y' WHERE `User` = 'root';
FLUSH PRIVILEGES;
SELECT `User`, `Grant_priv` FROM `mysql`.`user`;
Et walla! J'espère que cela pourra aider.
Après avoir entré en tant qu'utilisateur root
, vérifiez vos privilèges:
mysql> show grants for 'root'@'localhost';
Après avoir vérifié vos privilèges, vous pouvez essayer de donner tous les privilèges à un autre utilisateur, ou vous pouvez essayer de donner à nouveau à l'utilisateur root
tous les privilèges:
mysql> grant all privileges on *.* to 'root'@'localhost';
Si votre utilisateur root
n'a pas de privilèges, vous pouvez essayer de les restaurer, alors:
Arrêtez le serveur mysqld
Redémarrez le serveur de cette façon mysqld_safe --skip-grant-table
Restaurez les privilèges root
avec:
mysql> flush privileges;
mysql> grant all privileges on *.* to 'root'@'localhost' with grant option;
Vos privilèges peuvent être réduits?
Vous pouvez également essayer de créer un autre compte avec des privilèges root.
Et supprimez l'utilisateur root et recréez avec les privilèges spécifiés.
Cela peut être utile: http://dev.mysql.com/doc/refman/5.5/en/resetting-permissions.html
C.5.4.1.2 - LINUX (Créer un fichier avec une requête qui crée, un nouvel utilisateur avec des privilèges root complets)
C.5.4.1.1 - Windows (Créer un fichier avec une requête qui crée, un nouvel utilisateur avec des privilèges root complets)
Requête: (Créer un utilisateur root)
CREATE USER 'new_root'@'%' IDENTIFIED BY '***';
GRANT ALL PRIVILEGES ON *.* TO 'new_root'@'%' IDENTIFIED BY '***' WITH GRANT OPTION MAX_QUERIES_PER_HOUR 0 MAX_CONNECTIONS_PER_HOUR 0 MAX_UPDATES_PER_HOUR 0 MAX_USER_CONNECTIONS 0;
MySQL Manual Create User: http://dev.mysql.com/doc/refman/5.5/en/adding-users.html