phpMyAdminを社内に置かない——見せる表・列・操作を宣言するDB管理ツールと、その入手経路4つ
名古屋でAIシステム開発の会社をやっています。Kurage DB Agent(kdbagent)という買い切りのデータベース管理ツールを作っています。この記事はその設計思想と入手経路の話です。制作の背景はnoteに書きました。
解いている問題
昔からある相談と、最近増えた相談が、実は同じ問題でした。
- 昔から: 「事務の担当者にDBの中身を直させたい。でもphpMyAdminは渡せない」
- 最近: 「AIエージェントにDBを触らせたい。でも全権限は渡したくない」
phpMyAdminやAdminerはDB管理者のための万能ツールで、任意のSQLが実行できます。「顧客の電話番号を1件直したいだけ」の相手に渡すと、全テーブルを削除できる権限も一緒に渡すことになります。AIエージェントに対しても構図はまったく同じです。
考え方を逆にした
万能な道具に制限をかけるのではなく、最初から「宣言した範囲だけ」の道具にしました。
'customers' => array(
'columns' => array('id','name','email','phone','note'), // これ以外の列は見えない
'search' => array('name','email','phone'),
'editable' => array('name','email','phone','note'), // これ以外は書き換えられない
'can_delete' => false, // 削除は禁止
),
宣言していない表・列・操作は実行できません。原価や内部フラグのように「見せたくない列」は、書かなければ存在しないのと同じです。
4つの入口が、同じ宣言を通る
| 入口 | 使う人 |
|---|---|
| ブラウザ | 非エンジニアの担当者(パスワードでログインして検索・編集) |
| コマンド | 自動処理(全部JSONを返す) |
| HTTP API | 外部システム連携(トークン必須) |
| MCPサーバー | Claude Code / Codex / Claude Desktop |
2026年8月にMCPサーバーを同梱しました。1行登録すると、AIに日本語で「コードにKUSNを含む見積を2件探して」と頼めます。当社は自社で運用している見積データベースでこれを実測しました。
それでいてAIは範囲外を壊せません。 宣言外のテーブルを覗こうとすれば「その表は許可されていません」、削除禁止の表への削除も拒否されます。参照だけ許したい相手には読み取り専用モードがあり、書き込みの道具がそもそもAIから見えなくなります。
すでにサーバーで運用している場合も、手元のPCからHTTPS経由で繋ぐブリッジを同梱しているので後付けできます(手元にDB接続情報を置かずに済みます)。
動作環境
- PHPが動けば動く。依存ライブラリなし(Composer・npm・Node.js不要)
- MySQL / SQLite 両対応
- MCPサーバーもPHP1枚。AI連携のための追加インストールも不要
- FTPで上げるだけ。共有レンタルサーバーで動く
SQLは全てプリペアドステートメント、表名・列名は使用前に必ず宣言と照合、管理画面はパスワード+CSRF、変更は全て監査ログ(誰が・いつ・どの表のどの行を・どう変えたか)。
入手経路4つ
経路1: 無料(GitHub・MIT)
コード本体は公開しています。設定を自分で書ける方はこれで十分です。
経路2: 手順書 5,500円
MCPサーバーの作り方そのものを知りたい方向けの教材です(PHPソース全文・登録手順・罠の逆引き)。
経路3: 製品として買う 55,000円(買い切り)
手順書・AI用指示書・MCPサーバー同梱のzipが届きます。月額はありません。MITなので改変・商用利用・再販も自由です。
経路4: 自社の要件に合わせて作ってもらう 110,000円〜
権限設計のコツ(有償の手順書にも書いていること)
- 実テーブル名を画面に出さない(
tableとlabelを分ける) editableはcolumnsより狭くする(見えるが編集できない列を作る)can_deleteは原則 false。削除が必要な運用は「無効にする」で代替できないか先に考えるlimitを必ず入れる。AIが全件取得を試みても上限で止まる- まず読み取り専用で配る。人にもAIにも、必要になってから編集を開ける
「AIに触らせるのが不安」という相談を受けたときの正解は、AIの側で制御しようとすることではなく、宣言を狭めることです。設定が最終的な防波堤になります。