.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> -pEnter 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に変更します。
ここまで実施したら、データベースを再起動します。
データベースを一度停止してから再度開始してください。
私の場合はここまでの対処で解決しました!
技術の移り変わりに追いつきたい…
アップデートによってアプリ間のインターフェースが合わなくなる、接続がうまくいかない、ってあるあるですよね………?
できることなら、新しい技術を使いたい気持ちは山々ですが、なかなかそうもいかない、ってのもあるある………だよね?