ホームページ  >  記事  >  データベース  >  MySQL ERROR 1045 の理由とその解決方法

MySQL ERROR 1045 の理由とその解決方法

王林
王林転載
2023-05-26 22:31:044884ブラウズ

    コマンド ラインで mysql -u root –p を入力するか、パスワードを入力するか、ツールを使用してデータベースに接続すると、次のエラー メッセージが表示されることがよくあります。多くの人がこのエラー メッセージを目にすると思いますが、私は MySQL を使用しているときにこのエラー メッセージに遭遇しました。

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

    通常はオンラインで解決策を見つけることができます

    1. サービスを停止します

    MySQL サービスを停止します;

     # windows
     net stop mysql 
     # linux
     service mysqld stop

    2. 検証をスキップします

    MySQL インストール ディレクトリ内の my.ini 設定ファイルを次のように変更します。ログイン時の権限チェックをスキップします。

     #到mysql根目录找到mysql配置文件 
     vim my.ini
     #在my.ini,[mysqld]下添加一行,使其登录时跳过权限检查
     skip_grant_tables

    3. パスワードの変更

    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;

    4. サービスを再起動します

    my.ini に追加されたスキップ許可ステートメントを削除または追加します。ファイル番号 注。

    サービスを再起動し、変更したパスワードでログインします。

    原因分析

    root ユーザーで MySQL にログインし、次のようにユーザー テーブルのユーザー情報を確認すると、ホスト フィールドがそれぞれ % と localhost になっていることがわかります。

    mysql>select host,user,password from user;

    MySQL ERROR 1045 の理由とその解決方法

    MySQL では、「%」は任意のホスト上の MySQL データベースにログインできることを意味します。なぜログイン ホストが次のようなユーザーを明示的に作成する必要があるのでしょうか。ローカルホスト?

    これには、MySQL のインストール時の初期化ユーザー、匿名ユーザー、および接続検証戦略が含まれます。

    以下で詳細な分析を行ってみましょう。

    MySQL をインストールすると、root ユーザーや、ホスト フィールドが localhost でユーザー フィールドが空のユーザーなど、一部のユーザーがデフォルトで初期化されます。

    User フィールドが空のユーザーは匿名ユーザーであり、ユーザーのパスワードも空です。誰でも匿名ユーザーを使用して MySQL データベースにログインできますが、できることは限られています。コマンドラインなどで mysql を直接入力してログインすると、匿名ユーザーがどのデータベースに権限を持っているかを確認できます:

    mysql>select current_user;

    MySQL ERROR 1045 の理由とその解決方法

    mysql>show databases;

    MySQL ERROR 1045 の理由とその解決方法

    上の図から、匿名ユーザーには information_schema と test データベースに対する権限のみがあることがわかります。

    匿名ユーザーは他のユーザーのログインにどのような影響を及ぼし、28000 エラーを引き起こすのでしょうか?

    MySQL データベースに接続しようとすると、データベースは、提供された ID とパスワードに基づいて接続要求を受け入れるかどうかを決定します。ID は、ユーザー名とクライアント ホストの 2 つの部分で構成されます (つまり、mysql コマンドが入力されたホスト)。

    ホスト フィールドの % は任意のホストに一致するか、ホスト フィールドにワイルドカードが含まれているため、一致する行が複数表示される可能性があり、サーバーはどの行に一致するかを決定する必要があります。サーバーはユーザー テーブルのデータをメモリに読み取ります。 、ホストフィールドとユーザーフィールドに従って行を並べ替えます。

    mysql>select host,user,password from user order by host desc,user desc;

    MySQL ERROR 1045 の理由とその解決方法

    クライアントが接続しようとすると、サーバーは並べ替えられた行を検索し、クライアントのホストとユーザー名に一致する最初の行を使用します。一致する行が見つかった後、パスワードが一致しているかどうかを確認し、一致していればログインは成功です。

    ユーザーフィールドが空の場合は、任意のユーザーと一致できることを意味します。

    ここでの注意:

    user は空です。つまり、任意のユーザーです。パスワードなしで localhost にログインする場合、匿名ユーザーには information_schema とに対するアクセス許可のみが与えられます。テスト データベース。他のデータベースを使用すると失敗します。

    MySQL ERROR 1045 の理由とその解決方法

    ユーザーが root の場合、パスワードが空として表示されるか、ホスト フィールドが「%」以外として表示される場合は、デフォルトの一致順序に従います。または、パスワード エラーまたはプロンプトが表示されます。エラー 1045 です。

    下の図は変更されており、参考用です。たとえば、最初のシーケンスで、ホストが localhost または 127 ループバック アドレスの場合、1045 エラーが発生します。

    MySQL ERROR 1045 の理由とその解決方法

    SO ソリューション

    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 の理由とその解決方法

    以上がMySQL ERROR 1045 の理由とその解決方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

    声明:
    この記事はyisu.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。