1. ホーム
  2. mysql

[解決済み] MySQL ERROR 1045 (28000)。ユーザー 'bill'@'localhost' (使用パスワード: YES)のアクセスが拒否されました。

2022-03-21 01:02:49

質問

まず最初に、私は多くの提案された質問に目を通しましたが、関連する回答が見つからなかったことをお伝えします。以下は、私がやっていることです。

Amazon EC2インスタンスに接続しています。このコマンドでMySQLのrootでログインできる。

mysql -u root -p

次に、新しいユーザー法案をホスト % で作成しました。

CREATE USER 'bill'@'%' IDENTIFIED BY 'passpass';

ユーザーbillにすべての権限を付与します。

grant all privileges on *.* to 'bill'@'%' with grant option;

そして、rootユーザーから終了し、billでログインしてみる。

mysql -u bill -p

が正しいパスワードを入力したのに、このようなエラーが発生しました。

エラー 1045 (28000)。ユーザー 'bill'@'localhost' (使用パスワード: YES)のアクセスが拒否されました。

解決方法は?

匿名ユーザーである可能性が高い ''@'localhost' または ''@'127.0.0.1' .

のとおりです。 マニュアル :

複数のマッチングが可能な場合、サーバーはそのうちのどれにマッチするかを決定しなければなりません。 を使用する。この問題を次のように解決している。(...)

  • クライアントが接続しようとすると、サーバーは以下の行を調べます。 [テーブルmysql.userの] をソート順に表示します。
  • サーバーは、クライアントのホスト名とユーザー名に一致する最初の行を使用します。

(...) を持つ行を順番に並べるソート規則を使用します。 最も特殊なHostの値を最初に指定する . 文字通りのホスト名 [「localhost」のような] とIPアドレスは、最も具体的なものです。

したがって、このような匿名ユーザーは、以下のように他のユーザーをマスクすることになります。 '[any_username]'@'%' から接続する場合 localhost .

'bill'@'localhost' が一致します。 'bill'@'%' にマッチするが、(例) ''@'localhost' ビフォアハンド

推奨される解決策は、この匿名ユーザーを削除することです(これは通常、いずれにしても良いことです)。


以下の編集は、主な質問とほとんど無関係です。これらは、このスレッド内の他のコメントで提起されたいくつかの質問に答えることを意図しているだけです。

編集1

として認証する 'bill'@'%' をソケット経由で送信します。

    root@myhost:/home/mysql-5.5.16-linux2.6-x86_64# ./mysql -ubill -ppass --socket=/tmp/mysql-5.5.sock
    MySQLモニターへようこそ(...)

    mysql> SELECT user, host FROM mysql.user;
    +------+-----------+
    | ユーザ名|ホスト名
    +------+-----------+
    | 法案|%||。
    | ルート|127.0.0.1|||。
    | ルート|::1|::2|::3|::4|::5|::6
    | ルート|ローカルホスト
    +------+-----------+
    セットで4行 (0.00秒)

    mysql> SELECT USER(), CURRENT_USER();
    +----------------+----------------+
    | user() | current_user() | (英語版のみ
    +----------------+----------------+
    | bill@localhost | bill@%|です。
    +----------------+----------------+
    セットで1行 (0.02秒)

    mysql> SHOW VARIABLES LIKE 'skip_networking';
    +-----------------+-------+
    | 変数名 | 値
    +-----------------+-------+
    | skip_networking | ON
    +-----------------+-------+
    セットで1行 (0.00秒)


編集2

全く同じ設定ですが、ネットワークを再アクティブ化したことと、匿名ユーザーを作成したことが異なります。 ''@'localhost' .

    root@myhost:/home/mysql-5.5.16-linux2.6-x86_64# ./mysql
    MySQLのモニターへようこそ(...)

    mysql> CREATE USER ''@'localhost' IDENTIFIED BY 'anotherpass';
    クエリ OK、0 行が影響を受けました (0.00 秒)

    mysql> バイバイ

    root@myhost:/home/mysql-5.5.16-linux2.6-x86_64# ./mysql -ubill -ppass \.
        -socket=/tmp/mysql-5.5.sock。
    エラー 1045 (28000)。ユーザー 'bill'@'localhost' (使用パスワード: YES) のアクセスが拒否されました。
    root@myhost:/home/mysql-5.5.16-linux2.6-x86_64# ./mysql -ubill -ppass \.
        -h127.0.0.1 --protocol=TCP
    エラー 1045 (28000)。ユーザー 'bill'@'localhost' (使用パスワード: YES) のアクセスが拒否されました。
    root@myhost:/home/mysql-5.5.16-linux2.6-x86_64# ./mysql -ubill -ppass \.
        -hlocalhost --protocol=TCP
    エラー 1045 (28000)。ユーザー 'bill'@'localhost' (使用パスワード: YES) のアクセスが拒否されました。



編集3

編集2と同じ状況で、今度は匿名ユーザーのパスワードを提供します。

    root@myhost:/home/mysql-5.5.16-linux2.6-x86_64# ./mysql -ubill -panotherpass -hlocalhost
    MySQLのモニターへようこそ(...)

    mysql> SELECT USER(), CURRENT_USER();
    +----------------+----------------+
    | user() | current_user() | (※)(※)(※)(※)。
    +----------------+----------------+
    | bill@localhost|@localhost|。
    +----------------+----------------+
    セットで1行 (0.01秒)


結論 1、編集 1 より: 次のように認証することができます。 'bill'@'%' をソケット経由で使用することができます。

結論2、編集2より:TCPで接続しても、ソケットで接続しても、認証プロセスには何の影響もありません。 'something'@'localhost' ソケットを使用した場合、当然ですが)。

結論3、編集3より:私は -ubill 匿名ユーザーでアクセスできるようになりました。これは、上記でアドバイスした「ソートルール」のためです。ほとんどのデフォルトのインストールでは、に注意してください。 パスワードなしの匿名ユーザーが存在する (そして、安全性を確保/削除する必要があります)。