1. ホーム
  2. php

[解決済み] php mysqli_connect: 認証方法がクライアントに知られていない [caching_sha2_password].

2022-06-03 14:55:45

質問

私はphpを使用しています mysqli_connect で MySQL データベースにログインしています。

<?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サーバーの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

caching_sha2_password を MySQL Server ini ファイルに追加すると、user1 または user2 でログインすることはまったくできなくなります。

error: mysqli_connect(): サーバーが要求した認証方法は、クライアントが知らないものでした [caching_sha2_password] in...

mysql_native_password を MySQL Server ini ファイルに追加すると、user1 でログインできますが、user2 では同じエラーが発生します。


を使用してどのようにログインできますか? caching_sha2_password を使用してログインできますか?

どのように解決するのですか?

PHP 7.4 では、この問題は発生しなくなりました。サポートされている caching_sha2 認証メソッドが mysqlnd に追加されました。


現在、PHP mysqli 拡張モジュールは新しい caching_sha2 認証機能をサポートしていません。 アップデートがリリースされるまで待つ必要があります。

MySQL 開発者の関連記事を参照してください。 https://mysqlserverteam.com/upgrading-to-mysql-8-0-default-authentication-plugin-considerations/

PDOについては言及されていないので、PDOで接続してみるといいかもしれません。