ホームページ制作 オフィスオバタ

XAMPPで SQLSTATE[28000]: Invalid authorization specification: 1045 Access denied for user に対処

先日XAMPPでPHPでのプログラム制作を行っていたところ、不可思議なエラーがでました。
DATABESEエラーと出ていますが、パラメータ間違いや、PHPの文法エラーだと思ていたら、なにか違うことに気づきました。

なぜならば、文法もパラメータも合っていたからです。

なんだこれは!?
と思いぐぐりました。
でもよくわからない・・・。

さらにググる→試す→直らない。
さらにググる→試す→直らない。


こんなことを延々と繰り返してようやく対処できましたので、忘備録として記録いたします。

実際に発生したエラーはこちら

use: の後には「アカウント名」@localhost となっていました。
ぐぐって調べると、「アカウント名間違い」と出てきましたが、アカウント名は合っています。
いったい何がいけないのでしょう…?

ググっては直し、ググっては直しの連続

いろいろググってみると、PHPの問題ではなく、MYSQLアカウント権限の問題ということがわかってきました。

さらに、エクスポートしたSQLをインポートした場合に発生する事象ということもわかってきました。
要はCREATE DEFINER文で権限を指定したアカウントのみ接続できるけれど、そうでないアカウントからアクセスするとエラーになる。

という文に引っかかっているようでした。

そこで以下のことを試しましたが、改善しませんでした。

エクスポートしたSQLデータをいろいろいじってもダメということが分かりました。

そもそも何がいけないの?

MYSQLアカウント権限の問題なのはわかりますが、アカウント名やパスワードはPHP側で正しく設定されており、DEFINER記述のないテーブルは問題なくアクセスできています。

アカウント名の記述ミスではありません。
ではなぜエラーになるのか?

その原因を調べたら、意外なことがわかりました。

先ほどのDEFINER文は以下のように記述します。

DEFINER=アカウント名 @ ホスト名

@ホスト名が曲者で、通常はlocalhost になっていますが、xamppはどうやら@localhostでは正しく動作しないようです。

しかし記述をIPアドレス変えてもダメだったので、違う方法で対応するしかありません。
xammpをいろいろいじくりまわしていたら、次の方法で現象が改善しました。

現象を改善させる設定方法

アカウントが動作するホスト名が、一致しないために発生する問題のため、ホスト名が一致するようにすればよいのです。

具体的には、アカウントのホスト名を「すべてのホスト」に変更してやればよいのです。

xammpのユーザーアカウント設定→該当のアカウントの「権限の編集」→ログイン情報を開くと、上記のような画面になります。

ホスト名をローカルホスト→すべてのホストへ変更し、保存すると権限エラーが発生しなくなりました。

xamppで環境を起こす際にはアカウントの権限にも注意を

今回は既存の環境改修のため、テスト環境を起こすためにデータベースをインポートして環境構築を行いました。
実機でテストすると、思わぬ事故が起きることがあります。
テスト環境で改修・動作確認を行い、実機へUPするのがセオリーです。

今回、テスト環境側で思わぬエラーが出て四苦八苦しましたが、また一つ良い経験をいたしました。

モバイルバージョンを終了