phpMyAdmin の認証タイプには三種類用意されています。config 認証は論外として、Cookie 認証 と http 認証の二通りの設定を説明します。
セキュリティ面では、ブラウザにパスワードを記憶させないのであれば、http 認証 + こちらの Apache MySQL 管理者用ポリシ がお勧めです。(サーバ管理者専用)
複数のローカルクライアントに 管理者が設置したphpMyAdmin を提供するのであれば、Cookie 認証 + Apache 一般ユーザー用ポリシ がお勧めです。(ローカルユーザで共有)
phpMyAdmin の設定は config.inc.php で行います。サンプルファイル config.sample.inc.php にありますので参考に指定ください。 cfg 指定の意味は付属のドキュメントに説明があります。
Cookie 認証でアクセスした場合、左のようなログインページが表示されます。MySQL アカウントを入力すれば、そのユーザの MySQL 管理画面が表示されます。
Cookie 認証の特徴についてはこちらで説明しています。
<?php
$i = 0;
$i++;
$cfg['Servers'][$i]['auth_type'] = 'cookie';
$cfg['blowfish_secret'] = '任意のBlowfish暗号化パスフレーズ';
$cfg['Servers'][$i]['host'] = 'localhost';
$cfg['Servers'][$i]['extension'] = 'mysql';
$cfg['Servers'][$i]['connect_type'] = 'tcp';
$cfg['Servers'][$i]['compress'] = false;
$cfg['Servers'][$i]['user'] = '';
$cfg['Servers'][$i]['password'] = '';
$cfg['LoginCookieValidity'] = '1800';
$cfg['Servers'][$i]['AllowDeny']['order'] = 'deny,allow';
$cfg['Servers'][$i]['AllowDeny']['rules'] = array('deny % from all','allow % from 192.168.1.0/24');
?>
以下、上記設定の内容です。この他にも多くの指定が行えます。付属のドキュメントを参照して下さい。日本語訳はこちらにあります。
Web サーバに管理権限がある場合は、config.inc.php の$cfg['Servers'][$i]['AllowDeny']['order'] と $cfg['Servers'][$i]['AllowDeny']['rules'] によるアクセス制限は行わず、Apache 側で設定するようにした方が間違いありません。
http 認証を行う場合は、以下のように指定します。この場合、Apache が認証を求めますが、求められるユーザー名とパスワードは、MySQL アカウントになります。
認証に成功した場合、そのユーザの MySQL 管理画面が表示されます。
<?php
$i = 0;
$i++;
$cfg['Servers'][$i]['auth_type'] = 'http';
$cfg['Servers'][$i]['host'] = 'localhost';
$cfg['Servers'][$i]['extension'] = 'mysql';
$cfg['Servers'][$i]['connect_type'] = 'tcp';
$cfg['Servers'][$i]['compress'] = false;
$cfg['Servers'][$i]['user'] = '';
$cfg['Servers'][$i]['password'] = '';
$cfg['Servers'][$i]['AllowDeny']['order']= 'deny,allow';
$cfg['Servers'][$i]['AllowDeny']['rules']= array('deny % from all','allow % from 192.168.1.0/24');
?>
バーチャルホストを構築している環境などで phpMyAdmin が上手く URL を見つけられない場合、フルパスで指定します。 2.3.x 以降は、この指定は必要ないようです。
$cfg['PmaAbsoluteUri'] = 'https://www.mydomain/phpMyAdmin/';
phpMyAdmin を shift_jis を利用する場合、エラーが発生して phpMyAdmin を使用することが出来ません。japanese-sjis.inc.php の修正が必要になります。
Shift JIS は、特定の文字で16進数に変換する際、PHP や CGI のプログラム表記とバッティングするためエラーが発生します。 この対策はとられていません。
該当文字に、表 / 十 / 申 / 予 / 能 / ソ などがありますが、japanese-sjis.inc.php には、能 の文字が含まれています。テキストエディタ当で適当な文字に置き換える事で解決します。
phpMyAdmin で指定する文字コードと、データベースの文字コードが異なる場合、文字化けを起こすことになります。
IP アドレスなどのアクセス制限は、phpMyAdmin 側で行うよりも Apache 側で行った方が確実です。
インターネット側からアクセスする必要がある場合は、MySQL データベースへの接続は、phpMyAdmin (Webサーバ)が行っていても データベースの内容、アクセスコードは http を使ってインターネットを流れることになります。
データベースの中身によっては SSL による通信経路の暗号化は必須となります。 Apache 側でSSLクライアント認証を導入すれば、総当り攻撃にも対応できます。
参照 => Apache2-SSLを有効にするには
ディレクティブ設定例 => 公開ディレクトリを新設する
ログ監視ツール Swatch 側でも phpMyAdmin に関するログは監視するようにします。
phpMyAdmin の簡単な利用例は以下で紹介しています。MySQL データベースを必要とする CMS 設置のために、phpMyAdmin を使用して用意する例です。
参照 => ユーザー参加型高機能フォーラム phpBB2 を導入する