おそらく匿名ユーザー''@'localhost' または''@'127.0.0.1' 。
マニュアル による :
複数の一致が可能な場合、サーバーはそれらのどれを使用するかを決定する必要があります。この問題は次のように解決されます:(...)
- クライアントが接続を試みると、サーバーは[テーブルmysql.user]の行を調べます。 ソートされた順序で。
- サーバーは、クライアントのホスト名とユーザー名に一致する最初の行を使用します。
(...)サーバーは、最も具体的なホスト値が最初にある行を並べ替える並べ替えルールを使用します 。文字通りのホスト名['localhost'など] とIPアドレスが最も具体的です。
したがって、このような匿名ユーザーは、'[any_username]'@'%'のような他のユーザーを「マスク」します。 localhostから接続する場合 。
'bill'@'localhost' 'bill'@'%'と一致します 、ただし一致します(例:''@'localhost' 事前に。
推奨される解決策は、この匿名ユーザーを削除することです(これは通常、とにかく行うのが良いことです)。
以下の編集は、主な質問とはほとんど関係ありません。これらは、このスレッド内の他のコメントで提起されたいくつかの質問に答えることのみを目的としています。
編集1
'bill'@'%'として認証 ソケットを介して。
example@sqldat.com:/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() |
+----------------+----------------+
| example@sqldat.com | example@sqldat.com% |
+----------------+----------------+
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)
編集2
ネットワークを再アクティブ化したことを除いて、まったく同じセットアップで、匿名ユーザー''@'localhost'を作成します。 。
example@sqldat.com:/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
example@sqldat.com:/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)
example@sqldat.com:/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)
example@sqldat.com:/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)
編集3
編集2と同じ状況で、匿名ユーザーのパスワードが提供されます。
example@sqldat.com:/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() |
+----------------+----------------+
| example@sqldat.com | @localhost |
+----------------+----------------+
1 row in set (0.01 sec)
結論1、編集1から:'bill'@'%'として認証できます ソケットを介して。
結論2、編集2から:TCP経由で接続するか、ソケット経由で接続するかは、認証プロセスに影響を与えません(ただし、'something'@'localhost'以外の人として接続することはできません)。 明らかに、ソケットを介して)。
結論3、編集3から:-ubillを指定しましたが 、匿名ユーザーとしてアクセスを許可されました。これは、上記の「ソートルール」によるものです。ほとんどのデフォルトのインストールでは、パスワードなし、匿名ユーザーが存在します
(そして、保護/削除する必要があります。)