目次
- 解決策は通常オンラインで見つけることができます
- 1.サービスを停止する
- 2. 検証をスキップする
- 3. パスワードを変更する
- 4. サービスを再起動します
- 原因分析
- SOソリューション
コマンドラインで mysql -u root –p と入力したり、パスワードを入力したり、ツールを使用してデータベースに接続したりすると、次のようなエラー メッセージが頻繁に表示されます。MySQL を使用していると、このエラー メッセージに遭遇したことがある人も多いと思います。
エラー 1045 (28000): ユーザー 'root'@'localhost' のアクセスが拒否されました (パスワードを使用: YES)
解決策は通常オンラインで見つけることができます
1.サービスを停止する
MySQL サービスを停止します。
1 2 3 4 |
|
2. 検証をスキップする
MySQL インストール ディレクトリの my.ini 設定ファイルを変更して、ログイン時の権限チェックをスキップします。
1 2 3 4 |
|
3. パスワードを変更する
MySQL サービスを起動し、MySQL にログインします。このとき、パスワードの入力を求められますので、任意のパスワードを入力し、Enter キーを押して MySQL に入ります。
1 2 |
|
次に、SQL ステートメントを使用して root ユーザーのパスワードを変更します。
1 2 3 4 5 6 7 |
|
4. サービスを再起動します
my.ini ファイルに追加されたスキップ許可ステートメントを削除またはコメント化します。
サービスを再起動し、変更したパスワードでログインします。
原因分析
root ユーザーで MySQL にログインし、次のようにユーザー テーブルのユーザー情報を確認すると、host のフィールドがそれぞれ % と localhost になっていることがわかります。
1 |
|
MySQL では、「%」は任意のホスト上の MySQL データベースにログインできることを意味します。では、なぜログイン ホストが localhost であるユーザーを明示的に作成する必要があるのでしょうか?
これには、初期化ユーザー、匿名ユーザー、MySQL インストール時の接続認証戦略などが含まれます。
以下の詳細な分析。
MySQL をインストールすると、root ユーザーや、ホスト フィールドが localhost でユーザー フィールドが空のユーザーなど、一部のユーザーがデフォルトで初期化されます。
「User」フィールドが空のユーザーは匿名ユーザーであり、このユーザーのパスワードも空です。誰でも匿名ユーザーを使用して MySQL データベースにログインできますが、できることは限られています。たとえば、次のように入力します。コマンドラインで mysql を直接使用してログインすると、匿名ユーザーがどのデータベースにアクセスできるかを確認できます。
1 |
|
1 |
|
上の図からわかるように、匿名ユーザーは、information_schema データベースと test データベースに対するアクセス許可のみを持っています。
また、匿名ユーザーは他のユーザーのログインにどのような影響を及ぼし、28000 エラーが発生するのでしょうか?
MySQL データベースに接続しようとすると、データベースは提供された ID とパスワードに基づいて接続要求を受け入れるかどうかを決定します。ID は、ユーザー名とクライアント ホスト (つまり、mysql コマンドを入力するホスト) の 2 つの部分で構成されます。
ホスト フィールドの % は任意のホストと一致するか、ホスト フィールドにワイルドカードが含まれているため、複数の一致する行が表示される可能性があり、サーバーはどの行と一致するかを決定する必要があります。サーバーはユーザー テーブルのデータをメモリに読み取り、それに応じて行を処理します。ホストフィールドとユーザーフィールドに追加します。
1 |
|
クライアントが接続しようとすると、サーバーはソートされた行を検索し、クライアントのホストとユーザー名に一致する最初の行を使用します。一致する行が見つかったら、パスワードが一致するかどうかを検証します。一致する場合、ログインは成功します。
ユーザーフィールドが空の場合は、どのユーザーでも一致できることを意味します。
ここに従ってください:
ユーザーは空です。つまり、任意のユーザーです。パスワードなしで localhost にログインする場合、匿名ユーザーには、information_schema データベースと test データベースに対する権限のみが与えられます。他のデータベースを使用すると、失敗します。
ユーザーが root で、パスワードが空として表示される場合、またはホスト フィールドが「%」以外として表示される場合は、デフォルトの一致順序に従うか、パスワードが間違っていることを示すプロンプトが表示されるか、エラー 1045 としてプロンプトが表示されます。
以下の図は参照用に修正され完成されたものです。たとえば、最初のシーケンスでは、ホストが localhost または 127 ループバック アドレスの場合、1045 エラーが発生します。
SOソリューション
1 2 3 4 |
|