Mysql
 sql >> Base de données >  >> RDS >> Mysql

MySQL ERROR 1045 (28000):Accès refusé pour l'utilisateur 'bill'@'localhost' (en utilisant le mot de passe :OUI)

Vous avez probablement un utilisateur anonyme ''@'localhost' ou ''@'127.0.0.1' .

Selon le manuel :

Lorsque plusieurs correspondances sont possibles, le serveur doit déterminer laquelle d'entre elles utiliser. Il résout ce problème comme suit :(...)

  • Lorsqu'un client tente de se connecter, le serveur parcourt les lignes [de la table mysql.user] dans l'ordre trié.
  • Le serveur utilise la première ligne qui correspond au nom d'hôte et au nom d'utilisateur du client.

(...) Le serveur utilise des règles de tri qui ordonnent les lignes avec les valeurs d'hôte les plus spécifiques en premier .Noms d'hôtes littéraux [tels que 'localhost'] et les adresses IP sont les plus spécifiques.

Par conséquent, un tel utilisateur anonyme "masquerait" tout autre utilisateur comme '[any_username]'@'%' lors de la connexion depuis localhost .

'bill'@'localhost' correspond à 'bill'@'%' , mais correspondrait (par exemple) à ''@'localhost' au préalable.

La solution recommandée est de supprimer cet utilisateur anonyme (c'est généralement une bonne chose à faire de toute façon).

Les modifications ci-dessous ne sont généralement pas pertinentes pour la question principale. Celles-ci sont uniquement destinées à répondre à certaines questions soulevées dans d'autres commentaires de ce fil.

Modifier 1

Authentification en tant que 'bill'@'%' via une prise.

    [email protected]:/home/mysql-5.5.16-linux2.6-x86_64# ./mysql -ubill -ppass --socket=/tmp/mysql-5.5.sock
    Welcome to the MySQL monitor (...)

    mysql> SELECT user, host FROM mysql.user;
    +------+-----------+
    | user | host      |
    +------+-----------+
    | bill | %         |
    | root | 127.0.0.1 |
    | root | ::1       |
    | root | localhost |
    +------+-----------+
    4 rows in set (0.00 sec)

    mysql> SELECT USER(), CURRENT_USER();
    +----------------+----------------+
    | USER()         | CURRENT_USER() |
    +----------------+----------------+
    | [email protected] | [email protected]%         |
    +----------------+----------------+
    1 row in set (0.02 sec)

    mysql> SHOW VARIABLES LIKE 'skip_networking';
    +-----------------+-------+
    | Variable_name   | Value |
    +-----------------+-------+
    | skip_networking | ON    |
    +-----------------+-------+
    1 row in set (0.00 sec)

Modifier 2

Exactement la même configuration, sauf que j'ai réactivé le réseau et que je crée maintenant un utilisateur anonyme ''@'localhost' .

    [email protected]:/home/mysql-5.5.16-linux2.6-x86_64# ./mysql
    Welcome to the MySQL monitor (...)

    mysql> CREATE USER ''@'localhost' IDENTIFIED BY 'anotherpass';
    Query OK, 0 rows affected (0.00 sec)

    mysql> Bye

    [email protected]:/home/mysql-5.5.16-linux2.6-x86_64# ./mysql -ubill -ppass \
        --socket=/tmp/mysql-5.5.sock
    ERROR 1045 (28000): Access denied for user 'bill'@'localhost' (using password: YES)
    [email protected]:/home/mysql-5.5.16-linux2.6-x86_64# ./mysql -ubill -ppass \
        -h127.0.0.1 --protocol=TCP
    ERROR 1045 (28000): Access denied for user 'bill'@'localhost' (using password: YES)
    [email protected]:/home/mysql-5.5.16-linux2.6-x86_64# ./mysql -ubill -ppass \
        -hlocalhost --protocol=TCP
    ERROR 1045 (28000): Access denied for user 'bill'@'localhost' (using password: YES)

Modifier 3

Même situation que dans l'édition 2, en fournissant maintenant le mot de passe de l'utilisateur anonyme.

    [email protected]:/home/mysql-5.5.16-linux2.6-x86_64# ./mysql -ubill -panotherpass -hlocalhost
    Welcome to the MySQL monitor (...)

    mysql> SELECT USER(), CURRENT_USER();
    +----------------+----------------+
    | USER()         | CURRENT_USER() |
    +----------------+----------------+
    | [email protected] | @localhost     |
    +----------------+----------------+
    1 row in set (0.01 sec)

Conclusion 1, de l'édition 1 :on peut s'authentifier en tant que 'bill'@'%' via une prise.

Conclusion 2, de l'édition 2 :Que l'on se connecte via TCP ou via un socket n'a aucun impact sur le processus d'authentification (sauf qu'on ne peut pas se connecter comme n'importe qui d'autre mais 'something'@'localhost' via une prise, évidemment).

Conclusion 3, de l'édition 3 :bien que j'ai spécifié -ubill , j'ai obtenu l'accès en tant qu'utilisateur anonyme. Cela est dû aux "règles de tri" conseillées ci-dessus. Notez que dans la plupart des installations par défaut, un sans mot de passe, anonyme l'utilisateur existe (et doit être sécurisé/supprimé).