MySQL|Authentication methodにハマった話

.NET Frameworkのアプリから新しくセットアップしたMySQL8.0データベースに接続しようとしたら、怒られました。

MySQLException: Authentication method 'caching_sha2_password' not supported by any of the available plugins. 
アポロ

ええええ?今まで使用していたアプリなのに?
MySQLのバージョンも合わせたのに?なぜ??

目次

環境

  • Windows 11
  • MySQL 8.0.20
  • .NET Framework 3.5

エラーの内容

改めてエラーの内容を確認。

MySQLException: Authentication method 'caching_sha2_password' not supported by any of the available plugins. 

アプリ側がcaching_sha2_passwordという認証方式をサポートしてないから怒ってるっぽい。
caching_sha2_passwordはMySQL8.0で導入された新しい認証方式。
アプリで使用しているMySQLコネクターも古いDLLを使用していたので、対応してなかったみたい。

となると、とれる選択肢は2つ。

  • アプリを新しい認証方式に合わせるか
  • MySQLの設定を見直すか

今回はアプリの修正は避けたかったので、後者のMySQLの設定を見直すことにしました。

MySQLの設定見直し

私は下記の流れで確認と修正をして、無事アプリからMySQLに接続できるようになりました。

①MySQLの接続確認

①は行わなくてもOKですが、「アプリ以外の他の方法であれば接続できる」ということを確認するために実施しました。
仮にアプリ以外からの接続もできないとなると、他の原因も探る必要が出てきてしまうので、その可能性を潰すための確認です。
また、ユーザーIDやパスワードが合っていることも確かめました。

やることは簡単、MySQLに接続するだけです。私はコマンドプロンプトを使用しました。
アプリからMySQLに接続するときに使用しているユーザーID、パスワードを使用します。

mysql -h <hostname> -u <user id> -p

Enter Keyを押して、パスワードを入力。

Enter Password: <password>

Enter Keyを押して、Welcomeと表示されたら接続成功です。
MySQLの接続自体は問題ないこと、MySQLとアプリ間の接続の問題であること、ユーザーIDとパスワードが正しいことが確定しました。

②各ユーザーの認証方式の確認と変更

各ユーザーの認証方式の設定を確認します。

①で既にMySQLに接続しているはずですので、下記コマンドを入力して認証方式を確認します。

SELECT user, host, plugin FROM mysql.user WHERE user = 'appuser';

pluginの列を見て、従来の認証方式、mysql_native_passwordであればOK。
caching_sha2_passwordと表示されている場合は、下記コマンドで認証方式を変更できます。

ALTER USER 'user'@'%' IDENTIFIED WITH mysql_native_password BY 'password';

認証方式を変更した後は、変更が適用されているか確認してください。
②まで実践しても、解決しない場合は③もやりましょう。

私の場合は認証方式を確認した時点でmysql_native_passwordとなっていてハマりました。

アポロ

認証方式合ってるやん。何で怒るの!?

解決した後に、よくよく調べてみるとMySQLとアプリのハンドシェイクが関係していることがわかりました。
が、長くなるのでここでは割愛!
気になる人は「MySQL ハンドシェイク」で検索や実際のハンドシェイクをWiresharkでキャプチャしてみてください。

③デフォルトの認証方式の変更

②では、各ユーザーの認証方式の確認と変更を実施しましたが、合わせてデフォルトで使用する認証方式を変更します。

デフォルトの認証方式を設定しているファイルmy.iniは下記フォルダにあります。
ProgramDataフォルダは隠しファイルに設定されているので、エクスプローラーで隠しファイルが見れるように設定してください。

C:\ProgramData\MySQL\MySQL Server 8.0\my.ini

my.iniを開いてdefault_authentication_plugin=mysql_native_passwordに変更します。

ここまで実施したら、データベースを再起動します。
データベースを一度停止してから再度開始してください。

私の場合はここまでの対処で解決しました!

技術の移り変わりに追いつきたい…

アップデートによってアプリ間のインターフェースが合わなくなる、接続がうまくいかない、ってあるあるですよね………?

できることなら、新しい技術を使いたい気持ちは山々ですが、なかなかそうもいかない、ってのもあるある………だよね?

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

目次