データベースを、AIにも人にも安全に触らせる — 範囲を宣言する1ファイルのDB管理ツール kdbagent
在庫表や顧客名簿を、担当者が時々直したい。でもデータベース全体を触らせるのは怖い——この「ちょうどいい範囲だけ触らせたい」に応える1ファイルのツール Kurage DB Agent(kdbagent) を作りました。
▶ kappstore で見る(税込55,000円) / デモを触る / GitHub(MIT)
万能ツールは、便利さと危険が背中合わせ
phpMyAdmin や Adminer は強力です。でも「任意のSQLを打てる」ということは、Webに置けば全データを晒す踏み台にもなり得ます。非エンジニアの担当者に渡すには危なく、AIエージェントに任せるのはもっと怖い。
kdbagent は逆の発想です。設定で「見せる表・列・操作」を宣言し、宣言外はどの入口からも触れないようにします。
'customers' => array(
'columns' => array('id','name','email','phone','note'), // これ以外の列は見えない
'editable' => array('name','email','phone','note'), // これ以外は書き換え不可
'can_delete' => false, // 削除は禁止
),
宣言していない列(たとえばパスワードや原価)は、検索結果にも編集フォームにも出てきません。宣言していない表や、禁止した削除は、ブラウザからもコマンドからも実行できません。
同じ制限を、3つの入口が通る
1つの kdbagent.php が、3通りに使えます。どれも同じ「範囲を絞った」制限を通ります。
- ブラウザ:ログイン・検索・編集・追加・削除の管理画面(CSRF・監査ログ付き)
- コマンド:
php kdbagent.php select customers --search 田中。JSONを返すので、Claude Code などのAIエージェントがそのまま叩けます(連携スキル同梱) - HTTP API:トークン付きのJSON API
AIにDB作業を任せられる理由
いま私たちは、社内の開発を Claude Code に任せています。そのとき一番怖いのが「AIがデータベースを直接いじって、想定外の行を壊す」ことでした。kdbagent を通せば、AIが触れるのは設定で宣言した範囲だけです。「顧客の電話番号を直しておいて」と頼んでも、editable に phone しか入れていなければ、それ以外は直せません。
つまり、AIに渡す前に設定で範囲を絞ることが、そのまま安全策になります。生SQLを書かせるより、この一枚を挟むほうが、はるかに安心して任せられます。
しくみと仕様
- 全SQLは PDO のプリペアドステートメント。値は必ずバインド(SQLインジェクション対策)。危険な文字列を検索欄に入れても「ただの検索語」として扱われ、DBは壊れません。
- 表名・列名は、SQLに組み立てる前に必ず宣言済みリストと照合します。利用者の入力をそのまま識別子にしません。
- 変更はすべて監査ログ(だれが・いつ・どの行を・どう変えたか)。
- MySQL / SQLite 両対応。依存ライブラリなし。一般的なレンタルサーバーで動きます。
- 買い切り・ソースコードごとお渡し・MITライセンス。改変も商用利用も自由です。
DBを直接いじる道具は、正直、作り方を間違えると危険です。だからこそ「範囲を宣言する」という一点に絞って作りました。デモで実際に触ってみてください。