WordPressサイト制作とメンテ/エラー対応から、PHP/CSS/javascriptプログラミング、動画・音・イラスト等制作まで扱うコラム

【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の脆弱性情報について

この手のライブラリやプラグインには よくあることなんですけど、このAdminerについても過去バージョンにおける、 『MySQLデータベース関連ファイルが外部から読み取り可能な脆弱性』が存在するとのことです。

JVNのサイトでチェックしたところ『バージョン4.6.3およびそれ以降のバージョン』で、脆弱性が修正されています。この記事執筆時点では最新バージョンが4.8.1だったので大丈夫ですが、古いバージョンは使わないのがベターです。

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で、各種SQLを実行してみる

Adminerには『SQLコマンド』という機能があり、SQLでデータベースを操作することができます。ここでは管理人が持っている持っているテストサイト(WordPress)のデータベースを、Adminer上から操作してみます。

SQLコマンドの使い方(例:SELECT文でpost_titleを取ってみる)

Adminer上の操作はこんな感じになります。SQLを書いて実行ボタンを押すという、基本的にはphpmyadminと一緒の使い方。ただ、『SELECT * 』だとすべての列データが出てきて、横に長くなってしまうので、『wp_postsからタイトルを20件とる』というのをやってみます。SQL文は以下の通り。

SELECT post_title FROM `wp_posts` LIMIT 20;

こんな感じでタイトルだけ出ます。長いので画像は途中で切っていますが、下にスクロールすると20件分出てました。

wp_postsテーブルから、id/タイトル/投稿日を20件取ってみる

とりあえずタイトルは取れたので、次は複数の項目をとってみますか。『id/タイトル/投稿日』でやってみます。SQL文は以下の通り。

SELECT ID, post_title, post_date
FROM `wp_posts` LIMIT 20;

こんな感じに。必要な分だけ指定して出せると見やすくて良いです。

SQLで、AdminerからWordPress記事を更新する(UPDATE)

次は更新もやってみますか。とりあえず、テストサイト上の記事データはこんな風になっています。『wp paragraph』のような、デフォルト文書がはいってますね。 記事id:4171番のところを更新してみます。SQLは以下の通り。 MySQLのクォーテーション仕様で、post_contentの文字列部分はバッククオートでなく、シングル引用符になってますので注意(バッククオートにするとエラー出ます)

UPDATE wp_posts
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書いて消してみます。以下の文を実行

DROP TABLE wp_wpmm_subscribers;

不要テーブル削除に成功。管理画面からテーブル削除できないときは、こういう感じでデータベースお掃除してもいいかもしれません。

あとがき・まとめ

  • Adminerは、わずか数百KBの1ファイルで、データベース管理ができる
  • インストールも簡単だが、セキュリティ面には注意
  • データベース慣れているかたは、直接SQLを書いて操作する、ということもできる

まとめると、こんなところでしょうか。phpMyAdminがすでに入っているサーバーとかだとそっちを使ってしまうかもしれないけど、お好みでこっちを選んでもよいかもしれません。


【カテゴリ】- PHP・データベースetc
【タグ】-

関連記事