web-dev-qa-db-ja.com

PHP with MySQL 8.0+エラー:サーバーがクライアントに不明な認証方法を要求しました

PHP 7.0でMySQLバージョン8を実行しています。

PHPからデータベースに接続しようとすると、次のエラーが表示されます。

接続エラー:SQLSTATE [HY000] [2054]サーバーがクライアントに不明な認証方法を要求しました

PHPはこのエラーを表示する場合があります

警告:mysqli_connect():サーバーは10行目のD:\ xampp\htdocs\reg\server.phpでクライアント[caching_sha2_password]に不明な認証方法を要求しました

この問題を修正するにはどうすればよいですか?

37
mohammed yaser

@mohammed、これは通常、mysqlデータベースが使用している認証プラグインに起因します。

デフォルトおよび何らかの理由で、mysql 8のデフォルトプラグインはauth_socketです。ほとんどの場合、アプリケーションはpasswordを使用してデータベースにログインすることを期待します。

Mysqlのデフォルト認証プラグインをまだ変更していない場合は、次の方法で変更できます。
1。 mysqlにrootとしてログインします
2。次のSQLコマンドを実行します。

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password
BY 'password';  

「パスワード」をルートパスワードに置き換えます。アプリケーションがrootユーザーでデータベースにログインしない場合、上記のコマンドの「root」ユーザーをアプリケーションが使用するユーザーに置き換えます。

Digital Oceanは、これについてもう少し詳しく説明します Mysqlのインストール

89
Elias Gikonyo

MySQL設定を変更する必要があります。 my.cnfファイルを編集し、この設定をmysqldセクションに配置します。

[mysqld]
default_authentication_plugin= mysql_native_password

次に、次のコマンドを実行します。

FLUSH PRIVILEGES;

上記のコマンドは、デフォルトの認証メカニズムの変更を有効にします。

32
michail_w

私は多くの方法を試してみましたが、これだけが私のために働きます

回避策 に感謝

**。envをチェックしてください

MYSQL_VERSION=latest

次に、このコマンドを入力します

$ docker-compose exec mysql bash
$ mysql -u root -p 

(ルートとしてログイン)

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'root';
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'root';
ALTER USER 'default'@'%' IDENTIFIED WITH mysql_native_password BY 'secret';

phpmyadminにアクセスして、次のようにログインします。

  • Host-> mysql
  • user-> root
  • password-> root

それが役立つことを願って

27

ここでの答えはどれも役に立たなかった。私がしなければならなかったことは:

  1. インストーラーを再実行します。
  2. 製品「MySQL Server」の横にあるクイックアクション「re-configure」を選択します
  3. 認証方法が表示されるまでオプションを選択し、「レガシー認証方法を使用」を選択します

その後、正常に動作します。

5
Stuperfied

同じ問題に直面して、デフォルトの認証メカニズムがmysql_native_passwordではなくcache_sha2_passwordであるため、mysqlバージョン8でwordpress dockerコンテナーを実行できませんでした。

この問題を修正するには、デフォルトの認証メカニズムをmysql_native_passwordにリセットする必要があります。

Mysqlインストールでmy.cnfファイルを検索します。通常はLinuxマシンで、次の場所にあります-/ etc/mysql

My.cnfファイルを編集し、見出し[mysqld]のすぐ下に次の行を追加します

default_authentication_plugin = mysql_native_password

ファイルを保存し、rootユーザーを使用してmysqlコマンドラインにログインします

コマンドFLUSH PRIVILEGESを実行します。

1

私はLaravel Lumenを使用して小さなアプリケーションを構築しています。
私にとっては、.envファイルでDB_USERNAMEが定義されていなかったためです。

DB_USERNAME=root

これを設定することで問題が解決しました。

0
CIRCLE

My.cnfファイルで、以下の2つのステップを確認します。

  • この値を確認してください-

    old_passwords = 0;

    0でなければなりません。

  • これもチェックしてください

    [mysqld] default_authentication_plugin = mysql_native_password確認するもう1つの値は、

    [mysqld]セクションは次のようになります。

0
sanjaya
preferences -> mysql -> initialize database -> use legacy password encryption(instead of strong) -> entered same password

config.inc.phpファイルとして、Apacheサーバーを再起動すると動作しました。私はまだそれについて疑っていたので、Apacheとmysqlサーバーを停止し、それらを再び起動しましたが、現在は機能しています。

0
Trần Đức