web-dev-qa-db-ja.com

php mysqli_connect:クライアントが認識できない認証方法[caching_sha2_password]

MySQLデータベースへのログインにphp mysqli_connectを使用しています(すべてローカルホスト上)

<?php
//DEFINE ('DB_USER', 'user2');
//DEFINE ('DB_PASSWORD', 'pass2');
DEFINE ('DB_USER', 'user1');
DEFINE ('DB_PASSWORD', 'pass1');
DEFINE ('DB_Host', '127.0.0.1');
DEFINE ('DB_NAME', 'dbname');

$dbc = mysqli_connect(DB_Host, DB_USER, DB_PASSWORD, DB_NAME);

if(!$dbc){
    die('error connecting to database');    
}
?>

これはmysql.userテーブルです: mysql.user table

MySQLサーバーのiniファイル:

[mysqld]
# The default authentication plugin to be used when connecting to the server
default_authentication_plugin=caching_sha2_password
#default_authentication_plugin=mysql_native_password

mySQLサーバーのiniファイルでcaching_sha2_passwordを使用すると、user1またはuser2でログインすることはまったくできません。

エラー:mysqli_connect():サーバーは、クライアント[caching_sha2_password]に不明な認証方法を要求しました...

mySQLサーバーのiniファイルのmysql_native_passwordを使用すると、user1でログインできますが、user2でも同じエラーが発生します。


mySqlサーバーでcaching_sha2_passwordを使用してログインするにはどうすればよいですか?

47
Guti_Haz

現在、php mysqli拡張モジュールは、新しいcache_sha2認証機能をサポートしていません。更新プログラムがリリースされるまで待つ必要があります。

Mysql開発者からの関連記事を確認してください: https://mysqlserverteam.com/upgrading-to-mysql-8-0-default-authentication-plugin-considerations/

彼らはPDOについては言及していませんでした。

20
abeyaz

私はこれをSQLコマンドで解決します:

ALTER USER 'mysqlUsername'@'localhost' IDENTIFIED WITH mysql_native_password BY 'mysqlUsernamePassword';

https://dev.mysql.com/doc/refman/8.0/en/alter-user.html によって参照されます

新しいユーザーを作成する場合

 CREATE USER 'jeffrey'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';

https://dev.mysql.com/doc/refman/8.0/en/create-user.html によって参照されます

これは私のために働く

105
黃皓哲
ALTER USER 'mysqlUsername'@'localhost' IDENTIFIED WITH mysql_native_password BY 'mysqlUsernamePassword';

ALTER USERの後に引用符( ')を削除し、mysql_native_password BYの後に引用符(')を保持します

それも私のために働いています。

11
Eranda Jayamaha

Windowsを使用していて、caching_sha2_passwordを使用できない場合は、次を実行できます。

  1. mySQL Installerを再実行します
  2. mySQL Server(一番上の項目)の横にある「再構成」を選択します
  3. 「認証方法」に到達するまで「次へ」をクリックします
  4. 「認証に強力なパスワード暗号化を使用する(推奨)」を「レガシー認証方法を使用する(MySQL 5.X互換性を保持する)」に変更します
  5. 「次へ」をクリックします
  6. [アカウントとロール]にルートアカウントパスワードを入力し、[チェック]をクリックします
  7. 「次へ」をクリックします
  8. 「構成の適用」が表示されるまで「次へ」をクリックし続けます
  9. 「実行」をクリックします

インストーラーは、必要なすべての構成変更を行います。

8
CJ Dennis

次のコマンドALTER USER 'root' @ 'localhost' identified with mysql_native_password BY 'root123';をコマンドラインで実行し、最終的にローカルサービスでMySQLを再起動しました。

2
JRonald Moreno

私のために働いています(PHP 5.6 + PDO/MySQL Server 8.0/Windows 7 64ビット)

ファイルC:\ProgramData\MySQL\MySQL Server 8.0\my.iniを編集します。

default_authentication_plugin=mysql_native_password

WindowsおよびMySQLシェルでMySQLサービスをリセットします...

ALTER USER my_user@'%' IDENTIFIED WITH mysql_native_password BY 'password';
1
Chinnon Santos