コマンド ラインで mysql -u root –p を入力するか、パスワードを入力するか、ツールを使用してデータベースに接続すると、次のエラー メッセージが表示されることがよくあります。多くの人がこのエラー メッセージを目にすると思いますが、私は MySQL を使用しているときにこのエラー メッセージに遭遇しました。
エラー 1045 (28000): ユーザー 'root'@'localhost' のアクセスが拒否されました (パスワードを使用: YES)
MySQL サービスを停止します;
# windows net stop mysql # linux service mysqld stop
MySQL インストール ディレクトリ内の my.ini 設定ファイルを次のように変更します。ログイン時の権限チェックをスキップします。
#到mysql根目录找到mysql配置文件 vim my.ini #在my.ini,[mysqld]下添加一行,使其登录时跳过权限检查 skip_grant_tables
MySQL サービスを開始し、MySQL にログインします。パスワードの入力を求められます。任意のパスワードを入力して Enter キーを押します。 MySQL に入ります。
#登录mysql mysql -u root -p
次に、SQL ステートメントを使用して root ユーザーのパスワードを変更します;
#将数据库切换至mysql库 mysql> USE mysql; #修改密码 mysql> UPDATE user SET password=PASSWORD(‘newpasswd')WHERE user='root'; #刷新MySQL权限相关的表 mysql> flush privileges; mysql> exit;
my.ini に追加されたスキップ許可ステートメントを削除または追加します。ファイル番号 注。
サービスを再起動し、変更したパスワードでログインします。
root ユーザーで MySQL にログインし、次のようにユーザー テーブルのユーザー情報を確認すると、ホスト フィールドがそれぞれ % と localhost になっていることがわかります。
mysql>select host,user,password from user;
MySQL では、「%」は任意のホスト上の MySQL データベースにログインできることを意味します。なぜログイン ホストが次のようなユーザーを明示的に作成する必要があるのでしょうか。ローカルホスト?
これには、MySQL のインストール時の初期化ユーザー、匿名ユーザー、および接続検証戦略が含まれます。
以下で詳細な分析を行ってみましょう。
MySQL をインストールすると、root ユーザーや、ホスト フィールドが localhost でユーザー フィールドが空のユーザーなど、一部のユーザーがデフォルトで初期化されます。
User フィールドが空のユーザーは匿名ユーザーであり、ユーザーのパスワードも空です。誰でも匿名ユーザーを使用して MySQL データベースにログインできますが、できることは限られています。コマンドラインなどで mysql を直接入力してログインすると、匿名ユーザーがどのデータベースに権限を持っているかを確認できます:
mysql>select current_user;
mysql>show databases;
上の図から、匿名ユーザーには information_schema と test データベースに対する権限のみがあることがわかります。
匿名ユーザーは他のユーザーのログインにどのような影響を及ぼし、28000 エラーを引き起こすのでしょうか?
MySQL データベースに接続しようとすると、データベースは、提供された ID とパスワードに基づいて接続要求を受け入れるかどうかを決定します。ID は、ユーザー名とクライアント ホストの 2 つの部分で構成されます (つまり、mysql コマンドが入力されたホスト)。
ホスト フィールドの % は任意のホストに一致するか、ホスト フィールドにワイルドカードが含まれているため、一致する行が複数表示される可能性があり、サーバーはどの行に一致するかを決定する必要があります。サーバーはユーザー テーブルのデータをメモリに読み取ります。 、ホストフィールドとユーザーフィールドに従って行を並べ替えます。
mysql>select host,user,password from user order by host desc,user desc;
クライアントが接続しようとすると、サーバーは並べ替えられた行を検索し、クライアントのホストとユーザー名に一致する最初の行を使用します。一致する行が見つかった後、パスワードが一致しているかどうかを確認し、一致していればログインは成功です。
ユーザーフィールドが空の場合は、任意のユーザーと一致できることを意味します。
ここでの注意:
user は空です。つまり、任意のユーザーです。パスワードなしで localhost にログインする場合、匿名ユーザーには information_schema とに対するアクセス許可のみが与えられます。テスト データベース。他のデータベースを使用すると失敗します。
ユーザーが root の場合、パスワードが空として表示されるか、ホスト フィールドが「%」以外として表示される場合は、デフォルトの一致順序に従います。または、パスワード エラーまたはプロンプトが表示されます。エラー 1045 です。
下の図は変更されており、参考用です。たとえば、最初のシーケンスで、ホストが localhost または 127 ループバック アドレスの場合、1045 エラーが発生します。
mysql> select host,user,password from user order by host desc,user desc; ## 将排序序列中最前面的用户修改host为'%' mysql> update user set host = '%' where host = 'oracle' and user = 'root'; mysql> flush privileges;
以上がMySQL ERROR 1045 の理由とその解決方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。