phpMyAdmin には,バージョン 3.4.2. から環境保管領域と呼ばれるようになった記憶媒体がある。 phpMyAdmin にしょっぱなにログインすると,「phpMyAdmin 環境保管領域が完全に設定されていないため、いくつかの拡張機能が無効になっています。理由についてはこちらをご覧ください。」というメッセージが出るので,名前にはなじみのある方も多いと思う。この機能を有効にすると, bookmarks, comments, SQL history, relations, PDF schema, MIME transformations を使えるようになる。まあ,この SQL サーバでやったことをまとめて覚えてくれている領域とでもいえばいいだろうか。なかなか,使いこなすところまでいかないのだが, bookmarks 機能なんかは,便利に使っているのものの一つだ。前にも,同名で記事を書いたことがあるのだが,それからだいぶ私の知識が進歩したと思うので,書き直すことにした。
ところで, phpMyAdmin をサーバにインストールするについては,セキュリティ上,気を付けなければいけないことがたくさんあるが,ここではそれには触れないので, Official Documentation にしっかり目を通して,各自気をつけていただきたい。手前味噌だが,我が家の phpMyAdmin タグの記事もいくらかは参考になると思う。
はじめて,環境保管領域を有効にするときの手順は以下のとおりである。
- create_tables.sql を使って, MySQL 上にそれ用のデータベースとユーザーを作る。
- 1. で作ったユーザに control user としての特権を付与する。
- config.inc.php をカスタマイズする。
では,始めます。
- テキストエディタで create_tables.sql を開け,下の2行をアンコメントする。
————
GRANT SELECT, INSERT, DELETE, UPDATE ON `phpmyadmin`.* TO
‘pma’@localhost;
————phpMyAdmin に root 権限でログインし, create_tables.sql をインポートする。これで, phpmyadmin データベースとパスワード未設定の pma ユーザが作成される。
注) 気休めかもしれないが, phpmyadmin と pma という名前は,サーバ独自の別の名前にしておいたほうがいいと思う。なにしろ, phpMyAdmin というのは有名どころのソフトで,攻撃も半端でないので。インポート前に, create_tables.sql を編集しておけばすむ話ですから。
- phpMyAdmin SQL クエリウインドウから,以下のステートメントを実行してやる。
————
GRANT USAGE ON mysql.* TO ‘pma’@’localhost’ IDENTIFIED BY ‘pmapass’;
GRANT SELECT (
Host, User, Select_priv, Insert_priv, Update_priv, Delete_priv,
Create_priv, Drop_priv, Reload_priv, Shutdown_priv, Process_priv,
File_priv, Grant_priv, References_priv, Index_priv, Alter_priv,
Show_db_priv, Super_priv, Create_tmp_table_priv, Lock_tables_priv,
Execute_priv, Repl_slave_priv, Repl_client_priv
) ON mysql.user TO ‘pma’@’localhost’;
GRANT SELECT ON mysql.db TO ‘pma’@’localhost’;
GRANT SELECT ON mysql.host TO ‘pma’@’localhost’;
GRANT SELECT (Host, Db, User, Table_name, Table_priv, Column_priv)
ON mysql.tables_priv TO ‘pma’@’localhost’;
————
当然ながら, ‘pmapass’ はちゃんと変えてネ。 phpmyadmin と pma も自分の使うものに変えるのを忘れないでください。
phpMyAdmin をログアウトする。 - config.inc.php を開けて,以下の 20 行をアンコメントする。 pmapass , phpmyadmin , pma の件もお忘れなく。
————
/*
* phpMyAdmin configuration storage settings.
*//* User used to manipulate with storage */
// $cfg[‘Servers’][$i][‘controlhost’] = ”; ⇐必要ならば,設定。
// $cfg[‘Servers’][$i][‘controlport’] = ”; ⇐必要ならば,設定。
$cfg[‘Servers’][$i][‘controluser’] = ‘pma’;
$cfg[‘Servers’][$i][‘controlpass’] = ‘pmapass’;/* Storage database and tables */
$cfg[‘Servers’][$i][‘pmadb’] = ‘phpmyadmin’;
$cfg[‘Servers’][$i][‘bookmarktable’] = ‘pma__bookmark’;
$cfg[‘Servers’][$i][‘relation’] = ‘pma__relation’;
$cfg[‘Servers’][$i][‘table_info’] = ‘pma__table_info’;
$cfg[‘Servers’][$i][‘table_coords’] = ‘pma__table_coords’;
$cfg[‘Servers’][$i][‘pdf_pages’] = ‘pma__pdf_pages’;
$cfg[‘Servers’][$i][‘column_info’] = ‘pma__column_info’;
$cfg[‘Servers’][$i][‘history’] = ‘pma__history’;
$cfg[‘Servers’][$i][‘table_uiprefs’] = ‘pma__table_uiprefs’;
$cfg[‘Servers’][$i][‘tracking’] = ‘pma__tracking’;
$cfg[‘Servers’][$i][‘designer_coords’] = ‘pma__designer_coords’;
$cfg[‘Servers’][$i][‘userconfig’] = ‘pma__userconfig’;
$cfg[‘Servers’][$i][‘recent’] = ‘pma__recent’;
$cfg[‘Servers’][$i][‘favorite’] = ‘pma__favorite’;
$cfg[‘Servers’][$i][‘users’] = ‘pma__users’;
$cfg[‘Servers’][$i][‘usergroups’] = ‘pma__usergroups’;
$cfg[‘Servers’][$i][‘navigationhiding’] = ‘pma__navigationhiding’;
$cfg[‘Servers’][$i][‘savedsearches’] = ‘pma__savedsearches’;
————phpMyAdmin に再ログイン。
「phpMyAdmin 環境保管領域が完全に設定されていないため、いくつかの拡張機能が無効になっています。理由についてはこちらをご覧ください。」というメッセージが消えたはず。
おしまい!!
これで,環境保管領域の機能が使えます。
追記(7/5):
書き忘れ。
アップグレードのときは,バックアップを取ったのち,新create_tables.sql を再度インポートする。前からあるものはそのままで,新しいテーブルのみ作ってくれるので,あとは,config.inc.php を手直しすればよい。
もちろん,既にcontrol user は存在しているので,例の2行のアンコメントはしない。また, phpmyadmin と pma も自分の使うものに変えておくこと。
追記2(7/9):
本日,くりくりさんへお返事を書いてて,ふと,1.と2.の間にタイムラグがあるのは,かなり怖いのかもと思った。うちのサーバの場合, MariaDB の接続ポートは外に対しては開いていないし,内向きに関してもユーザが私だけなので,そこまで神経質になる必要はないのだが,アクセス数が多く,必然的に悪意のアタックの絶対数の多いサーバの場合,1.と2.の間にタイムラグがあると, pma ユーザがノーパスでさらされる時間ができることになる。これは,かなり怖い。
ということは,ユーザづくりは手作業でやって,パスワードと特権を設定したのち, create_tables.sql インポートするほうが,やっぱベターかな。
ところで,うちの controluser の特権は,現時点で以下のようになっている。
————
GRANT USAGE ON *.* TO ‘pma’@’localhost’ IDENTIFIED BY PASSWORD ‘pmapass’;
GRANT SELECT, INSERT, UPDATE, DELETE ON pma_main.* TO ‘pma’@’localhost’;
GRANT SELECT (
Host, User, Select_priv, Insert_priv, Update_priv, Delete_priv,
Create_priv, Drop_priv, Reload_priv, Shutdown_priv, Process_priv,
File_priv, Grant_priv, References_priv, Index_priv, Alter_priv,
Show_db_priv, Super_priv, Create_tmp_table_priv, Lock_tables_priv,
Execute_priv, Repl_slave_priv, Repl_client_priv
) ON mysql.user TO ‘pma’@’localhost’;
GRANT SELECT ON mysql.db TO ‘pma’@’localhost’;
GRANT SELECT ON mysql.host TO ‘pma’@’localhost’;
GRANT SELECT (Host, Db, User, Table_name, Table_priv, Column_priv)
ON mysql.tables_priv TO ‘pma’@’localhost’;
————