[第25回] MCP経由のDB参照でも権限は維持された — QueryPie Community MCP
2026年11月9日
AIツールにDBをつなぐ際、誰が何を見られるかが気になった。必要な注文は参照し、精算など別管理のデータは既存権限で保護したい。
CommunityにはMCPサーバーがある。Inspectorで注文は取得でき、同じ人の精算参照は権限エラーで遮断された。両方とも監査に残った。
既存の開発者アカウントで始める
Demo DeveloperのOrders Control LabへのRead-Only・Selectを使い、MCP用の追加権限は付けなかった。

注文は許可、精算は制限という違いがMCPでも維持されるかを特に確認したかった。
QueryPieアドレスを登録しMCP接続する
MCPはAIツールなどが外部機能を呼ぶ接続方式だ。今回は要求と応答を直接見られるInspectorで試した。
Mac上のQueryPie http://localhost:8000/api/mcpへStreamable HTTPで接続した。クライアントへDBパスワードは入力不要だった。

Demo Developerでログイン済みのブラウザから認証するとConnectedになった。iam_user_meはDemo Developer・demo-devを返し、誰の権限か確認できた。

許可済み一覧から注文DBを選ぶ
dac_list_accessible_connectionsでWebと同じOrders Control LabとOrders Demo MySQLが返った。

次の参照用cluster_uuidも含まれ、Orders Control Labの値を指定した。既存接続と権限を使えるため準備が簡単だった。
注文1件を参照する
この版のツール名はdac_query。4003の番号・状態・金額を取得するSELECTを入力した。
SELECT order_id, status, total_amountFROM orders_control.ordersWHERE order_id = 4003;
4003、DELIVERED、18500.00の1行が返り、以前の変更をMCPでも確認できた。

同じ接続でも精算テーブルは開けない
同じツール・接続でsettlement_detailsから4002の精算番号と金額を検索した。
SELECT settlement_id, order_id, settlement_amountFROM orders_control.settlement_detailsWHERE order_id = 4002;
結果ではなくテーブル権限がないと返った。注文を参照できても別途制限した精算まで開かなかった。

MCP用に規則を作り直さず同じ基準が適用された。必要参照と機密保護を両立し、新ツールごとに別の権限体系を作る手間が減る。
監査にもMCP経由と残る
Audit → Databases → Query Auditに両方あり、人はDemo Developer、接続はOrders Control Labだった。
注文はSuccess、Executed From MCPで、既存画面で誰がどの経路で参照したか分かった。

精算はFailure・Preventedで、詳細にSELECTと権限エラーがあった。クライアントの拒否結果を管理者も確認できた。

接続後も管理が従来どおりなのがよかった。同じ利用者・DB権限を使い、同じ監査でSQLを確認でき、AI連携でも既存体系を活用できる点が魅力的だった。
QueryPie Community 11.6.7とMCP Inspector 2.14.0で、直接ツールを呼び認証、注文、精算遮断、監査を確認した。
参考: Community MCP設定ガイド · Query Audit
![[第24回] サーバー作業を再生して確認する — QueryPieセッション録画](/assets/content/acp-lab-notes/session-recording/01.webp)
![[第26回] Kubernetes設定は読み、変更は止める — QueryPieのロールとアクセスポリシー](/assets/content/acp-lab-notes/kubernetes-policies/01.webp)