phpMyAdminで『information_schema』などを非表示にする方法

MySQLでは、初期状態で『information_schema』、『mysql』、『test』、『performance_schema』などが作成されます。
『information_schema』は情報スキーマと呼ばれ、データベースで定義された情報が格納されています。
情報スキーマは標準SQLで定義されているもので、PostgreSQLなど他のRDBMSと共通化するために存在します。

この『information_schema』は通常、一般のユーザーには閲覧などをすることがないものですが、 どのユーザーにもアクセスする権限があるのでphpMyAdminでもデータベースの一覧に表示がされます。

このデータベースを一覧に表示させたくない場合はconfig.inc.phpで『hide_db』を使います。

config.inc.php

$cfg['Servers'][$i]['hide_db'] = "(^information_schema$|^performance_schema$|^test$)";


『hide_db』が使用される場所は次のようになっています。

/libraries/List_Database.class.php 85行目

protected function _checkHideDatabase()
{
    if (empty($GLOBALS['cfg']['Server']['hide_db'])) {
        return;
    }

    foreach ($this->getArrayCopy() as $key => $db) {
        if (preg_match('/' . $GLOBALS['cfg']['Server']['hide_db'] . '/', $db)) {
            $this->offsetUnset($key);
        }
    }
}

『hide_db』を正規表現のパターンとして使用して、一致するデータベースを非表示としています。

ただし一覧から非表示となるだけで、アクセスすることはできます。
『information_schema』は、すべてのユーザーから参照される必要があるためGRANTなどでアクセスできるデータベースを限定しても自動的にアクセス権が付与されます。

SHOW DATABASES;
SHOW TABLES FROM information_schema;

のようなSQL文では参照することができます。

関連記事

スポンサーリンク

assetsフォルダには1MB以上の非圧縮ファイルを設置できない

ホームページ製作・web系アプリ系の製作案件募集中です。

上に戻る