183 votes

Accès refusé pour l’utilisateur ' racine ' @' localhost ' lors de la tentative d’accorder des privilèges. Comment pour accorder des privilèges ?

Mes excuses pour la longueur du post. J'ai regardé un certain nombre de questions similaires et donc je suis démontrant que j'ai vérifié les bases. Même si bien sûr, cela ne veut pas dire que je n'ai pas manqué en quelque chose de tout à fait évident. :-)

Ma question (sans tous les contes) est: pourquoi suis-je refuser l'accès d'un utilisateur avec les privilèges de faire ce que je suis en train de faire et où j'ai déjà tapé le mot de passe et l'accès? (Par souci d'exhaustivité, j'ai essayé de taper le mot de passe erroné juste pour s'assurer que le client MySQL serait de me refuser l'accès au démarrage du programme.)

Maintenant, la narration:

Connecté à la coque de la machine exécutant le serveur MySQL via ssh, je me connecte en tant qu'utilisateur root:

[myname@host ~]$ mysql -u root -p -hlocalhost
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 62396
Server version: 5.5.18-log MySQL Community Server (GPL)

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> 

Génial. Ma lecture des réponses à des questions similaires à penser que je devrait assurez-vous que les privilèges sont en cours avec ce qui est dans la table de

mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.00 sec)

mysql> 

Assurez-vous ensuite que je suis qui je pense que je suis:

mysql> SELECT user();
+----------------+
| user()         |
+----------------+
| root@localhost |
+----------------+
1 row in set (0.00 sec)

...et vraiment vraiment assurez-vous que:

mysql> SELECT current_user();
+----------------+
| current_user() |
+----------------+
| root@localhost |
+----------------+
1 row in set (0.00 sec)

mysql> 

So far So good. Maintenant, quels privilèges?

mysql> SHOW GRANTS FOR 'root'@'localhost';
+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Grants for root@localhost                                                                                                                                                                                                                                                                                                                                                                                                        |
+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, RELOAD, SHUTDOWN, PROCESS, FILE, REFERENCES, INDEX, ALTER, SHOW DATABASES, SUPER, CREATE TEMPORARY TABLES, LOCK TABLES, EXECUTE, REPLICATION SLAVE, REPLICATION CLIENT, CREATE VIEW, SHOW VIEW, CREATE ROUTINE, ALTER ROUTINE, CREATE USER, EVENT, TRIGGER ON *.* TO 'root'@'localhost' IDENTIFIED BY PASSWORD '[OBSCURED]' WITH GRANT OPTION |
+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)

Maintenant, c'est un peu dur à lire, de sorte que diriez-vous de cette façon (vous verrez aussi qu'il y a non-localhost utilisateur 'root'):

mysql> SELECT * FROM mysql.user WHERE User='root'\G
*************************** 1. row ***************************
                 Host: localhost
                 User: root
             Password: *[OBSCURED]
          Select_priv: Y
          Insert_priv: Y
          Update_priv: Y
          Delete_priv: Y
          Create_priv: Y
            Drop_priv: Y
          Reload_priv: Y
        Shutdown_priv: Y
         Process_priv: Y
            File_priv: Y
           Grant_priv: Y
      References_priv: Y
           Index_priv: Y
           Alter_priv: Y
         Show_db_priv: Y
           Super_priv: Y
Create_tmp_table_priv: Y
     Lock_tables_priv: Y
         Execute_priv: Y
      Repl_slave_priv: Y
     Repl_client_priv: Y
     Create_view_priv: Y
       Show_view_priv: Y
  Create_routine_priv: Y
   Alter_routine_priv: Y
     Create_user_priv: Y
           Event_priv: Y
         Trigger_priv: Y
             ssl_type: 
           ssl_cipher: 
          x509_issuer: 
         x509_subject: 
        max_questions: 0
          max_updates: 0
      max_connections: 0
 max_user_connections: 0
*************************** 2. row ***************************
                 Host: [HOSTNAME].com
                 User: root
             Password: *[OBSCURED]
          Select_priv: Y
          Insert_priv: Y
          Update_priv: Y
          Delete_priv: Y
          Create_priv: Y
            Drop_priv: Y
          Reload_priv: Y
        Shutdown_priv: Y
         Process_priv: Y
            File_priv: Y
           Grant_priv: Y
      References_priv: Y
           Index_priv: Y
           Alter_priv: Y
         Show_db_priv: Y
           Super_priv: Y
Create_tmp_table_priv: Y
     Lock_tables_priv: Y
         Execute_priv: Y
      Repl_slave_priv: Y
     Repl_client_priv: Y
     Create_view_priv: Y
       Show_view_priv: Y
  Create_routine_priv: Y
   Alter_routine_priv: Y
     Create_user_priv: Y
           Event_priv: Y
         Trigger_priv: Y
             ssl_type: 
           ssl_cipher: 
          x509_issuer: 
         x509_subject: 
        max_questions: 0
          max_updates: 0
      max_connections: 0
 max_user_connections: 0
 2 rows in set (0.00 sec)

Génial! MySQL pense que je suis root@localhost et root@localhost a tous ces privilèges. Cela signifie que je dois être en mesure de faire ce que je veux, non?

mysql> GRANT ALL PRIVILEGES ON *.* TO 'steves'@'[hostname].com' IDENTIFIED BY '[OBSCURED]' WITH GRANT OPTION;
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)

Comment ai-je pu foiré quelque chose de cette base?

Remarque: pour quelqu'un qui veut suggérer que je ne peux pas avoir un nom d'utilisateur root avec tous les privilèges, c'est grand et quelque chose que je vais envisager de faire une fois que je peux donner à un autre utilisateur de certains privilèges.

Merci!!!!

73voto

Aryo Points 1311

J'ai également eu le même problème avec cela, mais sur Windows après la mise à jour de MySQL 5.5 de MySQL 5.1. J'ai déjà essayé de changer, de créer et de réinitialisation de mot de passe mentionnés dans ici, ici, ici, et ici, aucune idée. J'obtiens toujours la même erreur:

ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)

Je suis en mesure de se connecter normalement, montrer toutes les bases de données, faire des sélections et des inserts, de créer et d'ajouter des utilisateurs, et mais quand il s'agit de la SUBVENTION, je suis foutu. Ces accès refusé erreur apparaît de nouveau.

J'ai réussi à résoudre ce problème en fixant les privilèges par la commande suivante sur le serveur MySQL répertoire bin/ comme mentionné dans ici:

C:\MySQL Server 5.5\bin> mysql_upgrade

Ensuite, le problème à disparu. J'espère que cette solution fonctionne sur Linux car, généralement, MySQL fournir la même commande à la fois sur Linux et Windows.

70voto

Anuj Gupta Points 2962

Cela peut se produire lorsque vous essayez d’accorder tous les privilèges sur toutes les tables à un autre utilisateur, car la table mysql.users est considéré comme hors-limites pour un utilisateur autre que root.

Ce qui suit mais devrait fonctionner :

Notez que nous utilisons « % ». au lieu de . *

63voto

Marc Alff Points 2303

Remarquez comment la sortie de la

SHOW GRANTS FOR 'root'@'localhost';

n'a pas dit "TOUS les PRIVILÈGES", mais a dû expliquer ce que root@localhost.

ACCORDER TOUS les PRIVILÈGES sera un échec, car l'utilisateur ne peut accorder ce qu'il/elle n'a pas, et le serveur semblent penser que quelque chose n'est pas ici ...

Maintenant, ce qu'il manque, alors ?

Sur mon système, j'obtiens ceci:

mysql> select version();
+------------+
| version()  |
+------------+
| 5.5.21-log |
+------------+
1 row in set (0.00 sec)

mysql> SHOW GRANTS FOR 'root'@'localhost';
+---------------------------------------------------------------------+
| Grants for root@localhost                                           |
+---------------------------------------------------------------------+
| GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' WITH GRANT OPTION |
| GRANT PROXY ON ''@'' TO 'root'@'localhost' WITH GRANT OPTION        |
+---------------------------------------------------------------------+
2 rows in set (0.00 sec)

mysql> SELECT * FROM mysql.user WHERE User='root' and Host='localhost'\G
*************************** 1. row ***************************
                  Host: localhost
                  User: root
              Password: 
           Select_priv: Y
           Insert_priv: Y
           Update_priv: Y
           Delete_priv: Y
           Create_priv: Y
             Drop_priv: Y
           Reload_priv: Y
         Shutdown_priv: Y
          Process_priv: Y
             File_priv: Y
            Grant_priv: Y
       References_priv: Y
            Index_priv: Y
            Alter_priv: Y
          Show_db_priv: Y
            Super_priv: Y
 Create_tmp_table_priv: Y
      Lock_tables_priv: Y
          Execute_priv: Y
       Repl_slave_priv: Y
      Repl_client_priv: Y
      Create_view_priv: Y
        Show_view_priv: Y
   Create_routine_priv: Y
    Alter_routine_priv: Y
      Create_user_priv: Y
            Event_priv: Y
          Trigger_priv: Y
Create_tablespace_priv: Y <----------------------------- new column in 5.5
              ssl_type: 
            ssl_cipher: 
           x509_issuer: 
          x509_subject: 
         max_questions: 0
           max_updates: 0
       max_connections: 0
  max_user_connections: 0
                plugin: <------------------------------- new column in 5.5
 authentication_string: <------------------------------- new column in 5.5
1 row in set (0.00 sec)

Il y a également de nouvelles tables en 5.5, comme par exemple mysql.proxies_user: assurez-vous que vous avez d'eux.

Lors de l'installation d'une nouvelle marque d'instance de serveur mysql, le script d'installation va créer tous les mysql.* tables avec la structure adéquate.

Lors de la mise à jour d'une ancienne version, assurez-vous que la bonne procédure de mise à niveau (mysql_upgrade) est utilisé, ce qui va ajouter le manque de tables / colonnes.

Il n'est qu'une supposition, mais il semble mysql_upgrade n'a pas été fait pour cette instance, provoque le comportement observé.

6voto

tzp Points 143

J’ai eu le même problème, c'est-à-dire de tous les privilèges accordés pour racine :

.. .mais toujours ne pas autorisé à créer un tableau :

Eh bien, c’était à cause d’une erreur utilisateur gênant, c'est-à-dire je ne sélectionne une base de données. Après l’émission d’utilisation dbname il a bien fonctionné.

5voto

Mithun Sasidharan Points 5589

Fondamentalement, cette erreur vient quand vous n’avez pas spécifié un mot de passe, cela signifie que vous avez un mot de passe incorrect répertorié dans un fichier d’options.

Lire cette DOC à comprendre comment attribuer et gérer les mots de passe aux comptes.

En outre, vérifiez si les autorisations sur le dossier `` est 711 ou non.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X