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

序文

今日、コンピューターを使用していて、Navicat を使用して MySQL データベースを開こうとしたところ、ログインできないことがわかり、プロンプトが表示されました1045 Access denied for user ‘root’@‘localhost’ (using password: YES)インターネット上の答えはどれも「同じで、説明も単純明快ではありません。」今回はこの問題の原因と2つの解決方法を解説します!
ここに画像の説明を挿入します

一、原因:

1. データベースのパスワードが改ざんされました。

はい、それが理由です。しかし、多くの人はすぐに反論するでしょう。私は自分のコンピュータをうまく使ってきたのに、どうやって改ざんされたのでしょうか? ハッカーの手口は非常に強力です。データベースのパスワードを改ざんすることが主な目的ではありません。改ざん後にデータベースに侵入し、データベース ファイルをバックアップし、ローカル データベースを削除することが主な目的です。主な目的は、ビットコインを脅迫することです。

ここに画像の説明を挿入します

2. データベースの権限が変更されました。

この理由は、マシン上のアカウント権限の変更に大きく関係していますが、実際にはさまざまなシナリオがあるため、例は示しません。

2. 解決策

1. 方法: mysql 設定ファイル my.ini を編集します。

mysql のインストールディレクトリは、コンピュータによって異なる場合がありますので参照ディレクトリ:
①D:\Program Files\MySQL\MySQL Server 5.0\my.ini;
②C:\ProgramData\MySQL\MySQL Server 8.0\my.ini;

在[mysqld]这个条目下加入 skip-grant-tables 保存退出后重启mysql
PS:
8.0的版本不支持,亲测8.03、次のエラーを避けるため:
mysql: [ERROR] unknown option ‘–skip-grant-tables’.

2. 手順は次のとおりです。

1. cmdを開き、「スタート」→「ファイル名を指定して実行」(ショートカットキーWin+R)をクリックします。
2. 停止: net stop mysql と入力します。
3. 開始: net start mysql と入力します
。 4. 権限のスキップ: Entermysqld --console --skip-grant-tables --shared-memory

ここに画像の説明を挿入します

MySQL サービスは Computer-Management-Service にもあります手动进行重启服务図に示すように:

ここに画像の説明を挿入します

このとき、cmdにmysql -u root -pと入力するとパスワードなしでログインできます。password:と表示されたらEnterキーを押して入力してください。ERROR 1045(28000)は表示されませんが、パスワードがないため多くの操作が制限されます。許可を与えます。

ここに画像の説明を挿入します

3. 概要: mysql8.0 バージョンでコマンドライン mysqld -skip-grant-tables がログインに失敗する問題の解決策

1. 管理者権限で cmd にログインします 管理者としてログインする方法がわからない場合は、「cmd」を検索し、検索結果を右クリックしてください。

2. コマンドラインに「net stop mysql;」と入力し、プロンプトを表示します。サービスが停止しています --> サービスが停止しました。その他のエラーがある場合は、Baidu までお問い合わせください。

  这只是一个示例,请在服务中查看服务具体名称,比如我的就是mysql8.0.33。

  服务不会打开的请 win+R --> services.msc --> 回车,找到mysql开头的服务名。

3、由于mysqld –skip-grant-tables实测在mysql8.0中已失效,现使用mysqld --console --skip-grant-tables --shared-memory

4. 別の cmd を開き、mysql を使用してパスワードなしで直接ログインします。

ログインに成功したら、引き続き次のプロセスに従います。

4. 新しいパスワードを設定します

1. mysql データベースを入力します。

mysql> mysql を使用します。

ここに画像の説明を挿入します

2. root ユーザーの新しいパスワードを設定します。

mysql> update user setauthentication_string=password(“新密码”) where user=“root”;
クエリ OK、1 行が影響を受ける (0.01 秒)
一致した行: 1 変更された: 1 警告: 0

ここに画像の説明を挿入します

PS: 次のエラーが発生した場合:

mysql> エラー 1054 (42S22): 'フィールド リスト' に不明な列 'パスワード' があります

是因为mysql数据库下已经没有password这个字段了,按照我的步骤把password字段改成了authentication_string

3. データベースを更新します

mysql> フラッシュ権限;
クエリは OK、影響を受ける行は 0 (0.00 秒)

ここに画像の説明を挿入します

4. mysql を終了します。

mysql> 終了;
さよなら

ここに画像の説明を挿入します

変更を加えた後、保存して終了し、mysql サービスを再起動して、Navicat に再度接続します。

おすすめ

転載: blog.csdn.net/y2020520/article/details/132136255