【PHPデータベース管理ツール】Adminer使い方チェック・サーバー設置して各種SQLを実行してみる
| 更新: 2024/02/10 | 3622文字
今回は、サイズも小さい1ファイルでいろいろ操作でき、『phpmyadminより使いやすい?』みたいな意見もある、『Adminer』をご紹介します。 概要や過去バージョンに確認された脆弱性、インストール方法、SQL実行などの操作を行ってみましたので、さっそくその内容を見ていきましょう。
Adminerとは?ダウンロード場所や脆弱性情報などは?
英語・MySQL用なら200kbちょっと、軽量で高機能なPHPデータベース管理ツール
phpmyadminのようなデータベース管理ツールで、『ファイルは1つで軽量(465 kB・MySQL&英語オンリーなら208 kB)』といった特徴があります。データベース作成や選択はもちろん、テーブルやカラムの作成・更新・削除なども、ツール上からok。SQLコマンドも入力できます。
Adminer公式配布ページ
https://www.adminer.org/en/
Adminerの脆弱性情報について
この手のライブラリやプラグインには よくあることなんですけど、このAdminerについても過去バージョンにおける、 『MySQLデータベース関連ファイルが外部から読み取り可能な脆弱性』が存在するとのことです。
JVNのサイトでチェックしたところ『バージョン4.6.3およびそれ以降のバージョン』で、脆弱性が修正されています。この記事執筆時点では最新バージョンが4.8.1だったので大丈夫ですが、古いバージョンは使わないのがベターです。
Adminerにおける情報漏えいの脆弱性(Japan Vulnerability Notes)
https://jvn.jp/vu/JVNVU93623190/index.html
Adminer設置・ログインのしかたやセキュリティについて
Adminerのサーバー設置・ログインのしかた
サーバー設置も結構簡単でした。まずは上記の公式サイトから、任意のタイプを選んでダウンロードします。テストで使うサイトにMySQLが入っていたので4.8.1 for MySQL English onlyというタイプを選択しました。ファイル名が『adminer-4.8.1-mysql-en.php』で、サイズが208KBとなります。
あとは、FTPなどで、サーバーの任意の場所にアップしました。リネームしてもokだったので、わざとわかりにくい名前にするとかもありです(ここではリネームしています)。今後のことも考えて、フォルダに入れて.htaccessファイルを設置しています。
ブラウザでAdminerのファイルにアクセスすると、こんな感じでログイン画面がでます。MySQLタイプを選んだのでシステムは『MySQL』で固定になります。 あとは『ホスト名(server)・ユーザー名・パスワード・データベース名』を入力。管理人は持っているテストサイト(WordPress)のデータベース情報を入れました。
こんな感じで、データベース情報を表示してくれます。デーブル選んで表示するほか、SQL入れたり、テーブル作成・インポート/エクスポートみたいな機能もありました。
Adminerのセキュリティについては?
公開領域でサクッとデータベースにアクセスできるツールなので、『データベースのユーザー名やパスワード』だけでは、少しセキュリティが心配なところがあります。 管理人が考えているのは
- 上記に上げたリネーム(ファイル名でバレる)
- .htaccessおいてるのでBasic認証や各種アクセス制限かける
- AzureADで多要素認証をいれる
こんなところでしょうか。 また、Adminerのプラグインで『login-otp(Two-factor authentication)』というのもあります。
Adminer login-otpプラグインページ
https://www.adminer.org/en/plugins/otp/
Adminerで、各種SQLを実行してみる
Adminerには『SQLコマンド』という機能があり、SQLでデータベースを操作することができます。ここでは管理人が持っている持っているテストサイト(WordPress)のデータベースを、Adminer上から操作してみます。
SQLコマンドの使い方(例:SELECT文でpost_titleを取ってみる)
Adminer上の操作はこんな感じになります。SQLを書いて実行ボタンを押すという、基本的にはphpmyadminと一緒の使い方。ただ、『SELECT * 』だとすべての列データが出てきて、横に長くなってしまうので、『wp_postsからタイトルを20件とる』というのをやってみます。SQL文は以下の通り。
こんな感じでタイトルだけ出ます。長いので画像は途中で切っていますが、下にスクロールすると20件分出てました。
wp_postsテーブルから、id/タイトル/投稿日を20件取ってみる
とりあえずタイトルは取れたので、次は複数の項目をとってみますか。『id/タイトル/投稿日』でやってみます。SQL文は以下の通り。
FROM `wp_posts` LIMIT 20;
こんな感じに。必要な分だけ指定して出せると見やすくて良いです。
SQLで、AdminerからWordPress記事を更新する(UPDATE)
次は更新もやってみますか。とりあえず、テストサイト上の記事データはこんな風になっています。『wp paragraph』のような、デフォルト文書がはいってますね。 記事id:4171番のところを更新してみます。SQLは以下の通り。 MySQLのクォーテーション仕様で、post_contentの文字列部分はバッククオートでなく、シングル引用符になってますので注意(バッククオートにするとエラー出ます)。
SET post_content = 'sqlでupdateしました。', post_author = 2
WHERE ID = 4171;
更新されましたね。
上記のSQLだと『id:4171番の記事で、post_contentを’sqlでupdateしました。’に書き換え、post_authorを2に書き換え』という内容になります。こんな感じに。
WPの管理画面でも反映されてます。しかし、管理画面から書けばよいのに、SQLで更新する必要があったのでしょうか(笑)
不要になったテーブルを削除する(DROP TABLE)
WordPressでは『プラグインが独自テーブルを作っていって、アンインストールしたらあとは使わない』みたいなケースがあります。なんのプラグインが作っていったかは覚えてませんが、『wp_wpmm_subscribers』という空テーブルが残ってました。これもAdminerからSQL書いて消してみます。以下の文を実行
不要テーブル削除に成功。管理画面からテーブル削除できないときは、こういう感じでデータベースお掃除してもいいかもしれません。
あとがき・まとめ
- Adminerは、わずか数百KBの1ファイルで、データベース管理ができる
- インストールも簡単だが、セキュリティ面には注意
- データベース慣れているかたは、直接SQLを書いて操作する、ということもできる
まとめると、こんなところでしょうか。phpMyAdminがすでに入っているサーバーとかだとそっちを使ってしまうかもしれないけど、お好みでこっちを選んでもよいかもしれません。