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サーバーの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
を使用してログインするにはどうすればよいですか?
現在、php mysqli拡張モジュールは、新しいcache_sha2認証機能をサポートしていません。更新プログラムがリリースされるまで待つ必要があります。
Mysql開発者からの関連記事を確認してください: https://mysqlserverteam.com/upgrading-to-mysql-8-0-default-authentication-plugin-considerations/
彼らはPDOについては言及していませんでした。
私はこれを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 によって参照されます
これは私のために働く
ALTER USER 'mysqlUsername'@'localhost' IDENTIFIED WITH mysql_native_password BY 'mysqlUsernamePassword';
ALTER USER
の後に引用符( ')を削除し、mysql_native_password BY
の後に引用符(')を保持します
それも私のために働いています。
Windowsを使用していて、caching_sha2_password
を使用できない場合は、次を実行できます。
インストーラーは、必要なすべての構成変更を行います。
次のコマンドALTER USER 'root' @ 'localhost' identified with mysql_native_password BY 'root123';
をコマンドラインで実行し、最終的にローカルサービスでMySQLを再起動しました。
私のために働いています(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';