27
Help us understand the problem. What are the problem?

More than 5 years have passed since last update.

posted at

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

参考:
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にログインすることが出来なくなりました。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Sign upLogin
27
Help us understand the problem. What are the problem?