Postgres用MCPサーバーの作り方 — 自然言語DB操作を安全にする4層防御
TL;DR · この記事で分かること
- 1 MicrosoftのパメラがPOSETTEで、エージェントが完全なSQLを送れる探索型サーバーから、完全に型付けされた運用型サーバーまで、Postgres向けMCPの幅広い構築方法を解説する。
- 2 GitHub CopilotがOpus 4.6を使い、住んでいる地域で4月に活動するハチの種類を尋ねる質問に、MCP経由でDBにSQLを実行して回答するデモから始まる。
- 3 MCPはModel Context Protocolの略で、AIアプリやエージェントが外部ツールやデータソースからコンテキストを取得する方法を定めるオープンプロトコル。Anthropicが提唱し、現在はLinux Foundationの一部となっている。
- 4 最小権限ロールを使い、特定スキーマへのSELECT権限のみを与えることで、INSERT・DROP・DELETEや、パーサーをすり抜けるCTEもデータベースレベルで強制的にブロックできる。
- 5 エージェントが自分でSQLを生成しても安全だと確信するには複数の保護レイヤーが必要で、トリッキーなクエリが各層を通過しうるため4層の防御を組む。
- 6 pg_sleep()や巨大なCROSS JOINといったサーバーへのDDoS的な操作には、ツールに最大30秒などのタイムアウトを設定して強制終了させる。
- 7 探索型・読み取り専用・完全型付けの3方式にはそれぞれ利点と制約があり、自分の状況に合う範囲を見極めて組み合わせるべきだと結論づける。
スライドで読む
全 3 スライド
MCPとは何か、Postgresでの実演
セッションは、GitHub CopilotがOpus 4.6を介してPostgresにクエリを投げ、地域のハチの観測データから回答を導くデモで幕を開ける。エージェントがMCPサーバーの存在を認識し、自らSQLを実行する流れだ。
MCPはAIアプリやエージェントが外部データソースからコンテキストを取得する方法を定義するオープンプロトコルである。Anthropicが最初に提唱し、その後広く採用されて今はLinux Foundationの傘下にある。
MCP以前は各データソースごとにカスタム統合が必要だったが、今はソースごとにMCPサーバーを置けば共通の取得手段が手に入る、とパメラは説明する。
自然言語SQLを安全にする4層防御
中核は、エージェントに自由なSQLを書かせても安全にするための防御設計だ。まず最小権限ロールで特定スキーマへのSELECTのみを許可し、INSERTやDROP、DELETEをデータベースレベルで遮断する。
パーサーをすり抜けてしまうCTE(WITH句)も、このデータベースレベルの強制でブロックされる。副作用を伴う関数呼び出しも最小権限ロールで防げる。
さらにpg_sleepや巨大なCROSS JOINのようなDDoS的操作に対しては、ツールにタイムアウトを設定して強制終了させる。これら複数の層を重ねて初めて、生成SQLの実行に確信が持てるという。
用途に応じたサーバー設計の選択
終盤、パメラはPostgres上にMCPサーバーを構築する複数の方法を振り返る。あらゆる質問に答えられる探索型は柔軟だが、あらゆるSQL操作を許してしまうリスクを伴う。
一方、完全に型付けされたツールは安全だが、答えられる質問の範囲は限定される。その中間に読み取り専用のSQLクエリという選択肢がある。
データベースレベルで多くを強制できるため最も安全なアプローチになると述べ、内部・外部を問わずユーザーが自然言語でDBと対話できる強力さを、設計上の注意とともに勧めて締めくくった。
編集部の視点
自然言語でDBを操作させる魅力の裏には、必ずセキュリティの問いが残る。最小権限ロールでSELECTのみを許し、CTEやDDoS的クエリをDB層で物理的に止めるという設計思想は、MCPに限らず『エージェントに権限を渡す』あらゆる場面に効く原則だ。プロンプトでの注意喚起は突破されうるが、データベースの権限境界は突破されない。AIに何かを任せるなら、信頼の防壁はアプリ層ではなく一段下に置くべきだという好例である。
出典
Microsoft Developer
An MCP for your Postgres DB | POSETTE: An Event for Postgres 2026
この記事はYouTube動画の字幕をもとにClaudeで自動要約しています。細部のニュアンスや正確な発言は元動画をご参照ください。
YouTubeで視聴する →関連記事
3 件
Mac-TV
AppleがMCPに参入:ソフトウェアはGUIではなくAIボットのために書かれる時代へ
Appleが最近MCP(Model Context Protocol)のサポートを発表し、業界に衝撃が走ったと紹介する。
Google Cloud Tech
MCPとAPIは何が違うのか:AI時代のプロトコルを基礎から整理する
AIモデルとツールをつなぐ方法が根本的に書き換えられつつあり、その中心にあるのがMCP(Model Context Protocol)だ。
Eric Tech
『OpenCode』徹底チュートリアル:Claude Codeの流儀(skills・MCP・agents.md)を保ったまま好きなモデルを自由に選べる
コーディングエージェントは特定のプロバイダー・モデルに縛られがちだが、OpenCodeなら既存サブスク・無料モデル・APIキー・ローカルモデルまで自由に選びつつ、Claude CodeやCodexで使えている機能をそのまま使い続けられる。