【phpMyAdmin】Permission deniedでログインできない時の解決方法

PHP
スポンサーリンク

前置き

mysqlコマンドではちゃんとログインできるのに、何故かphpMyAdminではPermission deniedでログインできないことがありました。(勿論、同じユーザ + パスワードを利用)

さらに言うとmysqld.sockもちゃんとあるし、
mysqld.sockの所有者、パーミッションも適切(660)な状態。

# ls -l /var/run/mysqld/mysqld.sock
srwxrwxrwx 1 mysql mysql 0 Sep 13 08:35 /var/run/mysqld/mysqld.sock

切り分けとして、mysqlではログインできてるということから、phpMyAdminの設定がおかしいぞ、という予測は立てられたけど、結構ハマったので解決法をメモ。

phpMyAdminの設定を変更

phpMyAdmin設定ファイルを変更します。

設定ファイルは、自分の環境の場合、以下にありました。
/etc/phpmyadmin/config.inc.php

このファイルの以下要素を変更。

/* Authentication type */
$cfg['Servers'][$i]['auth_type'] = 'cookie';

/* Server parameters */
$cfg['Servers'][$i]['host'] = '127.0.0.1';
$cfg['Servers'][$i]['port'] = '3306';
auth_type の設定

元々コメントアウトされてたので解除。
クッキーを使って認証情報を保存し、セッションを管理する指定のようです。
この設定は、最も一般的なphpMyAdminの認証方式らしいので改めて指定。

hostとportの指定

phpMyAdminが意図したMySQLサーバーに接続するための指定。
値を明示した方がより確実っぽいので指定。

上記実行の上、再度phpMyAdminに接続すると「サーバの選択:」プルダウン項目が出現。

「127.0.0.1:3306」を選択して、ユーザ名、パスワードを入れることで無事ログイン…!!

Access denied for user ‘ユーザ名’@‘localhost’


もしかしたらこれでもログインできず、だけど、エラーの種類が変わる場合があります。

Access denied for user ‘ユーザ名’@‘localhost’と出てます。
このエラーの場合、ユーザー(上記キャプチャでいうrootユーザ)の認証方式を確認する必要があります。

どうやらMySQL 8.0以降では、 auth_socket プラグインを使用していることがあり、このプラグインは、ユーザ認証をパスワードではなく、システムのUNIXソケットを使って認証されるようになっているそうです。
その場合、phpMyAdmin のような外部ツールからパスワードを使ってログインすることができなくなっているようです。


なので、対象のユーザに対し、パスワードで認証できるような設定が必要です。
mysqlにコマンドでログインして確認します

mysql -u ユーザ名 -p

で、以下クエリで対象ユーザの状態を確認します。

mysql> SELECT user, host, plugin FROM mysql.user WHERE user = 'ユーザ名';
+------+-----------+-------------+
| user | host      | plugin      |
+------+-----------+-------------+
| ユーザ名 | localhost | auth_socket |
+------+-----------+-------------+
1 row in set (0.00 sec)

auth_socketになってました。。
認証方式を以下クエリで変更、更新します。

ALTER USER 'ユーザ名'@'localhost' IDENTIFIED WITH mysql_native_password BY 'ユーザ名';
FLUSH PRIVILEGES;

これで改めて確認してみると、、、

mysql> SELECT user, host, plugin FROM mysql.user WHERE user = 'ユーザ名';
+------+-----------+-----------------------+
| user | host      | plugin                |
+------+-----------+-----------------------+
| ユーザ名 | localhost | mysql_native_password |
+------+-----------+-----------------------+

mysql_native_passwordになってることが確認できます。

この状態で改めてphpMyAdminにログインしてみてください。(きっとログインできるようになっているはず)

タイトルとURLをコピーしました