LoginSignup
3
2

More than 5 years have passed since last update.

MYSQL: PHP から認証できない場合

Last updated at Posted at 2018-09-01

PHP で MySQL に接続しようとすると、 次のようなエラーが出ることがあります。

PDOException in Connector.php line 55:
SQLSTATE[HY000] [2054] The server requested authentication method unknown to the client

環境

MySQL の バージョン 8 からこのようなエラーが出るようになりました。 私がこのエラーを出した MySQL のバージョンは、 8.0.11 でした。

  • macOS High Sierra version 10.13.6
  • MySQL 8.0.11 Homebrew

MySQL 8 からの 2種類の認証プラグイン

MySQL 8 から、 2種類の認証プラグインが使えます。

  • mysql_native_password
    • 従来からあった認証プラグインです。
  • caching_sha2_password
    • MySQL version 8 から導入された新しい認証プラグインです。

caching_sha2_password は、 安全なパスワードの暗号化、 キャッシュを用いた認証処理のパフォーマンスの向上等のメリットが多いそうで、 MySQL 8 ではデフォルトで caching_sha2_password が使われるようになっています。

しかし、 PHP で新しい接続プラグインがサポートされていないので(いずれサポートされるとは思いますが)、 caching_sha2_password で管理されているパスワードを使って接続しようとするとエラーが出ます。

PHP で接続できない場合の解決策

どの認証プラグインを使うかはユーザごとの設定です。 次のようにして、ユーザごとの設定を確認できます。

mysql> select User, Plugin from mysql.user;
+------------------+-----------------------+
| User             | Plugin                |
+------------------+-----------------------+
| sample_user      | mysql_native_password |
| mysql.infoschema | mysql_native_password |
| mysql.session    | mysql_native_password |
| mysql.sys        | mysql_native_password |
| root             | caching_sha2_password |
+------------------+-----------------------+
5 rows in set (0.01 sec)

そのため既存のユーザで接続できるようにする場合は、既存ユーザの設定を変更する必要があります。 新しく mysql_native_password を使うユーザを作成して、そのユーザを使って接続することもできます。

既存ユーザの認証プラグインを変更する

次の SQL を実行します。

ALTER USER sample_user@localhost IDENTIFIED mysql_native_password BY 'PASSWORD';

mysql_native_password を利用する新しいユーザを作る

次のようにして、 mysql_native_password を使うユーザを作成します。

CREATE USER another_user@localhost IDENTIFIED mysql_native_password BY 'PASSWORD';

サーバのデフォルト設定を変える

新しいユーザを作成する場合、 認証プラグインを指定する必要があり、 デフォルトでは caching_sha2_password が設定されます。 これを、デフォルトで mysql_native_password を利用するよう設定すれば、 認証方式を指定せずにユーザを作成しても mysql_native_pasword が使われます。

my.cnf に次のように記述し、 サーバを再起動します。

[mysqld]
default_authentication_plugin=mysql_native_password

この記事は拙ブログからの転載です。

3
2
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
2