PHP
adminer

Adminerでお手軽DB管理&アクセス制御

More than 3 years have passed since last update.

参考:
http://www.adminer.org/
http://www.adminer.org/en/extension/

Adminerとは?

AdminerはphpMyAdminのようにブラウザからデータベースを管理するツール。
しかし、AdminerはPHP1ファイルのみで構成されていてとてもお手軽。
さらにMySQL以外のデータベースにも対応していて、何より高速に動作する。

Adminer本体の設置

ドキュメントルートなどに以下のファイルを設置

adminer-3.7.1-mysql.php

実際に使ってみる

後はブラウザで該当ファイルにアクセスするだけで動作する。
ログイン画面で、アクセスするデータベースのユーザ名などが求められる。

IPアドレスでアクセス制御

さすがにドキュメントルートにこんな危ないものは置けないぜ、というのは当然の反応。
そこで、Adminerは簡単に自分自身を拡張できるようになっています。
今回はログイン時にアクセスしてきたユーザのIPアドレスをチェックし、許可したIPアドレス以外はログイン出来ないようにしてみます。

上記の adminer-3.7.1-mysql.php を設置したのと同じディレクトリに、以下のファイルを作成します。

adminer_ext.php
<?php
function adminer_object() {
    class AdminerSoftware extends Adminer {
        function login($login, $password) {
            $whiteList = array(
                // ココに、アクセスを許可するIPアドレスを羅列する
                "xxx.xxx.xxx.xxx",
                "yyy.yyy.yyy.yyy"
            );

            $remoteIP = $_SERVER["REMOTE_ADDR"];
            if(in_array($remoteIP, $whiteList) === true ) {
                return true;
            } else {
                return false;
            }
        }
    }
    return new AdminerSoftware;
}

Adminerは自分と同じディレクトリに adminer_ext.php が存在すればそれを自動的にrequireします。
その中でAdminerのもっているメソッドををオーバライドできます。(今回はloginメソッドをオーバライド)
これで許可されたIPから以外はAdminerにログインすることが出来なくなりました。