<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Azure SQL | The .NET Blog</title><link>https://thedotnetblog.com/ja/tags/azure-sql/</link><description>Articles, tutorials and insights from the .NET community.</description><generator>Hugo</generator><language>ja</language><managingEditor>@thedotnetblog (The .NET Blog)</managingEditor><webMaster>@thedotnetblog</webMaster><lastBuildDate>Wed, 03 Jun 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://thedotnetblog.com/ja/tags/azure-sql/index.xml" rel="self" type="application/rss+xml"/><item><title>NL2SQLはエージェント時代のSQLインジェクションだ</title><link>https://thedotnetblog.com/ja/news/emiliano-montesdeoca/nl2sql-agentic-sql-injection-mcp-server/</link><pubDate>Wed, 03 Jun 2026 00:00:00 +0000</pubDate><author>Emiliano Montesdeoca</author><guid>https://thedotnetblog.com/ja/news/emiliano-montesdeoca/nl2sql-agentic-sql-injection-mcp-server/</guid><description>エージェントに自然言語でデータベースをクエリさせる前に、これを読んでください。NL2SQLはスキーマの完全性、不確定性、SQL MCP Serverが実際に何を解決するかを考えるまで、シンプルに見えます。</description><content:encoded>&lt;p&gt;NL2SQLのピッチには完璧に聞こえるバージョンがあります：ユーザーが自然言語で質問し、エージェントがSQLを生成し、データが返ってくる。画面が少なく、クエリが少なく、コードが少ない。シンプル。&lt;/p&gt;
&lt;p&gt;そして5分後にもっと考えます。&lt;/p&gt;
&lt;h2 id="デモで誰も話さない問題"&gt;デモで誰も話さない問題&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;スキーマは物事を説明するように設計されていません。&lt;/strong&gt; 不可解なテーブル名、一貫性のないカラム名、追加の述語なしでは意味的に無効な技術的に有効な関係 — これらはエンタープライズデータベースでは普通のことです。バグではなく、ビジネス変更の蓄積された歴史です。しかし、意図を伝えるように設計されていないスキーマから意図を推論するようにモデルに求めると、モデルは何があっても試みます。諦めません。最善のクエリを生成し、自信を持って結果を返します。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;モデルは決定論的ではありません。&lt;/strong&gt; 同じデータベースに同じ質問を2回して、異なるSQLを得るかもしれません。モデルは確率を計算しており、コンテキストのわずかな変化が異なる出力を生み出します。エージェントが常に正しいクエリを生成するという保証をテストで達成することはできません。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;ユーザーレビューはスケールしません。&lt;/strong&gt; 「実行前にすべてのクエリを確認するだけ」は安全に聞こえます。しかし、ユーザーがデータモデルとSQLの両方の専門家であることを前提としています — 自然言語インターフェースを必要としなかった人々まさにその人たちです。また、認知的過負荷と確認バイアスの新しいクラスをもたらし、クエリの複雑さに圧倒されたユーザーが無効なクエリを調査するのではなく承認します。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;そしてインジェクションがあります。&lt;/strong&gt; 従来のSQL開発では、パラメータ化がインジェクションを解決しました。ユーザー入力はSQLの構造ではなく、パラメータを埋めていたからです。NL2SQLでは、モデルがSQL自体を生成します。プロンプト、スキーマコンテキスト、会話履歴、取得されたデータすべてが実行されるものに影響します。誰かがモデルが生成するものを変えるプロンプトを作成した場合、それはインジェクションです — パラメータレベルではなく、クエリ生成レベルで。そしてテーブルの削除（明らか、回復可能）とは異なり、NL2SQLインジェクションは目に見えるエラーなしに誤った結果を返すクエリを生成します。ビジネス上の意思決定が間違ったデータに基づいてなされます。&lt;/p&gt;
&lt;h2 id="sql-mcp-serverが実際に解決すること"&gt;SQL MCP Serverが実際に解決すること&lt;/h2&gt;
&lt;p&gt;ここで記事は最も実践的に有用な点を述べます。エージェントに任意のスキーマアクセスを与えて最善を望むのではなく、SQL MCP Serverは&lt;a href="https://learn.microsoft.com/en-us/azure/data-api-builder/overview"&gt;Data API builder&lt;/a&gt;の上に構築された&lt;strong&gt;厳選されたAPIサーフェス&lt;/strong&gt;を公開します。&lt;/p&gt;
&lt;p&gt;違いは重要です：エージェントはSQLを生成しません。事前定義された結果形式を返す名前付きエンドポイントを呼び出します。SQLは開発者によって一度書かれ、決定論的です。エージェントの非決定論は任意のクエリを構築することではなく、&lt;em&gt;どの&lt;/em&gt;エンドポイントを呼び出すかを選択することに制限されます。&lt;/p&gt;
&lt;p&gt;これは従来のアプリモデルでのSQLインジェクションに対してパラメータ化が行ったこと — 信頼できない入力から任意のクエリを構築する能力を削除すること — に類似しています。&lt;/p&gt;
&lt;h2 id="正しい質問"&gt;正しい質問&lt;/h2&gt;
&lt;p&gt;記事は「NL2SQLを決して使うな」とは言っていません。それは言います：&lt;em&gt;どこで&lt;/em&gt;適用し、&lt;em&gt;何を&lt;/em&gt;公開するかについて慎重に考えてください。スコープされたスキーマと読み取り専用アクセスを持つ制御された環境での探索的分析には、NL2SQLで問題ないかもしれません。ビジネス上の意思決定が結果に依存する本番システムには、厳選されたAPIレイヤーが大幅に安全です。&lt;/p&gt;
&lt;p&gt;正直に言うと：いくつかの問題は、自然言語からSQLよりも名前付きエンドポイントの背後にある構造化されたクエリで解決する方が本当に優れています。SQL MCP Serverはエージェントインターフェースを完全に放棄することなく、そのオプションを提供します。&lt;/p&gt;
&lt;p&gt;元の投稿: &lt;a href="https://devblogs.microsoft.com/azure-sql/sql-mcp-server-nl2sql/"&gt;Considering NL2SQL? Should your database really be the prompt? How can SQL MCP Server help?&lt;/a&gt;&lt;/p&gt;</content:encoded></item><item><title>Azure SQL がエンベディングを生成できるようになりました — 純粋な T-SQL で、アプリ層不要</title><link>https://thedotnetblog.com/ja/news/emiliano-montesdeoca/azure-sql-ai-generate-embeddings-ga-rag-tsql/</link><pubDate>Fri, 22 May 2026 00:00:00 +0000</pubDate><author>Emiliano Montesdeoca</author><guid>https://thedotnetblog.com/ja/news/emiliano-montesdeoca/azure-sql-ai-generate-embeddings-ga-rag-tsql/</guid><description>AI_GENERATE_EMBEDDINGS と CREATE EXTERNAL MODEL が Azure SQL Database と Managed Instance で GA になりました。T-SQL だけで構築された RAG パイプライン、データ移動不要。</description><content:encoded>&lt;p&gt;RAG パイプラインを構築したことがあれば、パイプライン税を知っているでしょう: データは SQL に存在しますが、エンベディングを生成するにはデータを抽出し、エンベディング API を呼び出し、バッチ処理とレート制限を処理し、ベクトル検索が可能な場所に結果を保存する必要があります。多くの場合、まったく異なるデータベースに。&lt;/p&gt;
&lt;p&gt;Azure SQL は、現在一般提供されている 2 つの機能でその大部分を排除しました: &lt;code&gt;CREATE EXTERNAL MODEL&lt;/code&gt; と &lt;code&gt;AI_GENERATE_EMBEDDINGS&lt;/code&gt;。&lt;/p&gt;
&lt;h2 id="何をするか"&gt;何をするか&lt;/h2&gt;
&lt;p&gt;これら 2 つの T-SQL 機能は統合パイプラインとして機能します:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;CREATE EXTERNAL MODEL&lt;/code&gt;&lt;/strong&gt; — 外部 AI モデルエンドポイントを名前付きデータベースオブジェクトとして登録します。場所、API フォーマット、モデルタイプ、資格情報を一度設定します。どこでも再利用できます。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;AI_GENERATE_EMBEDDINGS&lt;/code&gt;&lt;/strong&gt; — 登録されたモデルを呼び出し、ベクトル値の JSON 配列を返すスカラー T-SQL 関数です。SELECT、INSERT、UPDATE、MERGE 文で動作します。&lt;/p&gt;
&lt;p&gt;合わせて、SQL エンジンを離れることなくエンドツーエンドのエンベディングパイプラインを形成します。&lt;/p&gt;
&lt;h2 id="完全なワークフロー"&gt;完全なワークフロー&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-sql" data-lang="sql"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;-- ステップ 1: エンベディングプロバイダーを一度登録する
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;CREATE&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;EXTERNAL&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;MODEL&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;MyEmbeddingModel&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;WITH&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;LOCATION&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;https://your-aoai-resource.openai.azure.com/&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;API_FORMAT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;Azure OpenAI&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;MODEL_TYPE&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;EMBEDDINGS&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;MODEL&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;text-embedding-ada-002&amp;#39;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;-- ステップ 2: T-SQL でインラインにエンベディングを生成する
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;UPDATE&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;docs&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;SET&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;embedding&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;AI_GENERATE_EMBEDDINGS&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;content&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;USE&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;MODEL&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;MyEmbeddingModel&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;FROM&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;documents&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;AS&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;docs&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;-- ステップ 3: ベクトル距離で検索する
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;SELECT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;TOP&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;content&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;FROM&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;documents&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;ORDER&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;BY&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;VECTOR_DISTANCE&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;cosine&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;embedding&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;AI_GENERATE_EMBEDDINGS&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;@&lt;/span&gt;&lt;span class="n"&gt;query&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;USE&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;MODEL&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;MyEmbeddingModel&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;これがパイプライン全体です: SQL のデータ、SQL で生成されたエンベディング、SQL での類似性検索。オーケストレーション層なし、ETL なし、別個のベクトルデータベースなし。&lt;/p&gt;
&lt;h2 id="サポートされる-api-フォーマットとオプション"&gt;サポートされる API フォーマットとオプション&lt;/h2&gt;
&lt;p&gt;GA では、&lt;code&gt;API_FORMAT&lt;/code&gt; は &lt;strong&gt;Azure OpenAI&lt;/strong&gt; と &lt;strong&gt;OpenAI&lt;/strong&gt; をサポートします。&lt;code&gt;MODEL_TYPE&lt;/code&gt; は現在 &lt;code&gt;EMBEDDINGS&lt;/code&gt; に固定されています。&lt;code&gt;PARAMETERS&lt;/code&gt; JSON では、再試行回数を含むモデルレベルのデフォルトを設定できます:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-sql" data-lang="sql"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;PARAMETERS&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;{&amp;#34;sql_rest_options&amp;#34;:{&amp;#34;retry_count&amp;#34;:3}}&amp;#39;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;認証はデータベース資格情報を使用するため、シークレットはアプリケーションコードの外に保持されます。&lt;/p&gt;
&lt;h2 id="net-アプリケーションで何が可能になるか"&gt;.NET アプリケーションで何が可能になるか&lt;/h2&gt;
&lt;p&gt;既存の SQL データの上に AI 機能を構築する .NET 開発者にとって、これは重要です。以下は不要です:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;エンベディング用に中間ストアにデータを抽出する&lt;/li&gt;
&lt;li&gt;外部エンベディングパイプラインを管理する&lt;/li&gt;
&lt;li&gt;別個のベクトルデータベースを設定する (フル機能のベクトルストアが必要な場合は Azure AI Search を使用できますが)&lt;/li&gt;
&lt;li&gt;アプリケーションのデータアクセス層を変更する&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;既存の SQL アプリケーションに段階的にセマンティック検索を追加できます。すでにお持ちの同じ T-SQL ツールを使用して。&lt;/p&gt;
&lt;h2 id="まとめ"&gt;まとめ&lt;/h2&gt;
&lt;p&gt;SQL データに対する RAG パターンが劇的にシンプルになりました。&lt;code&gt;AI_GENERATE_EMBEDDINGS&lt;/code&gt; + &lt;code&gt;CREATE EXTERNAL MODEL&lt;/code&gt; は、既存の SQL アプリケーションが新しいインフラを追加することなくベクトル検索機能を獲得できることを意味します。&lt;/p&gt;
&lt;p&gt;両機能は本日、Azure SQL Database と Azure SQL Managed Instance で GA です。&lt;/p&gt;
&lt;p&gt;元の投稿: &lt;a href="https://devblogs.microsoft.com/azure-sql/generate-embeddings-function-and-external-model-object-support-are-now-generally-available-in-azure-sql/"&gt;Generate Embeddings Function and External Model Object Support Are Now Generally Available in Azure SQL&lt;/a&gt;&lt;/p&gt;</content:encoded></item><item><title>Azure Data Studio は廃止されました：Azure SQL ワークフローを VS Code に移行する</title><link>https://thedotnetblog.com/ja/news/emiliano-montesdeoca/azure-data-studio-retired-move-to-vscode-sql/</link><pubDate>Sat, 09 May 2026 00:00:00 +0000</pubDate><author>Emiliano Montesdeoca</author><guid>https://thedotnetblog.com/ja/news/emiliano-montesdeoca/azure-data-studio-retired-move-to-vscode-sql/</guid><description>Azure Data Studio は 2025 年 2 月 6 日に廃止され、サポートは 2026 年 2 月 28 日に終了します。MSSQL 拡張機能を使用した VS Code への完全な移行パスを紹介します。</description><content:encoded>&lt;p&gt;&lt;em&gt;この投稿は自動翻訳されました。元のバージョンは&lt;a href="https://thedotnetblog.com/ja/news/emiliano-montesdeoca/azure-data-studio-retired-move-to-vscode-sql/"&gt;こちら&lt;/a&gt;。&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="https://devblogs.microsoft.com/azure-sql/azure-data-studio-is-retired-move-your-azure-sql-workflow-to-vs-code-in-10-minutes/"&gt;Azure Data Studio は 2025 年 2 月 6 日に廃止されました&lt;/a&gt;。サポートは 2026 年 2 月 28 日に終了します。推奨される代替ツールは MSSQL 拡張機能を備えた VS Code です。&lt;/p&gt;
&lt;h2 id="インストールするもの"&gt;インストールするもの&lt;/h2&gt;
&lt;p&gt;開始するために必要な 3 つのもの：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;MSSQL 拡張機能&lt;/strong&gt; — VS Code Marketplace で「SQL Server (mssql)」を検索&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;SQL Database Projects 拡張機能&lt;/strong&gt; — コードとしてのスキーマ、ビルド検証、ガイド付き公開&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;.NET 8 SDK&lt;/strong&gt; — ビルドシステムに必要。SDK が見つからないのは初回起動時の最も一般的な問題&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="ads-の接続と設定の移行"&gt;ADS の接続と設定の移行&lt;/h2&gt;
&lt;p&gt;MSSQL 拡張機能には &lt;strong&gt;ADS Migration Toolkit&lt;/strong&gt; が同梱されており、ガイド付きフローで一度きりの移行を処理します。保存された接続、接続グループ、設定、キーバインドがすべて自動的にインポートされます。&lt;/p&gt;
&lt;h2 id="f5-のクセを取り戻す"&gt;F5 のクセを取り戻す&lt;/h2&gt;
&lt;p&gt;ADS ユーザーはクエリ実行に F5 を使用します。&lt;strong&gt;MSSQL Database Management Keymap&lt;/strong&gt; 拡張機能をインストールすると、F5 を含む ADS スタイルのキーバインドが復元されます。&lt;/p&gt;
&lt;h2 id="sql-database-projectsコードとしてのスキーマ"&gt;SQL Database Projects：コードとしてのスキーマ&lt;/h2&gt;
&lt;p&gt;プロジェクトを右クリック → &lt;strong&gt;公開&lt;/strong&gt; → ターゲットを設定 → 生成された T-SQL スクリプトを確認 → デプロイ。デプロイ前のスクリプトプレビューが主要な安全機能です。アイテムテンプレートはテーブル、ストアドプロシージャ、ビューのスタブを生成します。SSDT と同じワークフローです。&lt;/p&gt;
&lt;p&gt;よくある問題：&lt;code&gt;.sqlproj&lt;/code&gt; ファイルの&lt;strong&gt;ターゲットプラットフォームの不一致&lt;/strong&gt;は、プロジェクトが別の SQL Server バージョン用に作成された場合にビルドエラーを引き起こします。&lt;/p&gt;
&lt;h2 id="schema-compare-と-schema-designer"&gt;Schema Compare と Schema Designer&lt;/h2&gt;
&lt;p&gt;拡張機能には &lt;strong&gt;Schema Compare&lt;/strong&gt;（プロジェクトとデプロイ済みデータベースの差分）と &lt;strong&gt;Schema Designer&lt;/strong&gt;（DDL を手書きせずに視覚的にスキーマを編集）も含まれています。&lt;/p&gt;
&lt;h2 id="microsoft-fabric-開発者向け"&gt;Microsoft Fabric 開発者向け&lt;/h2&gt;
&lt;p&gt;セットアップは同一ですが、VS Code で開く前に &lt;strong&gt;Fabric ポータル&lt;/strong&gt;からデータベースを Git に接続することから始めてください。Microsoft には専用ガイドがあります：&lt;em&gt;Azure Data Studio to VS Code — What it means for SQL database in Fabric developers&lt;/em&gt;。&lt;/p&gt;
&lt;h2 id="まとめ"&gt;まとめ&lt;/h2&gt;
&lt;p&gt;移行は手動での再構築ではなく、一度きりのガイド付きフローです。3 つのツールをインストールし、ADS Migration Toolkit を実行し、キーバインドを復元すれば、10 分以内に通常の作業に戻れます。&lt;/p&gt;
&lt;p&gt;ステップバイステップのスクリーンショットと Fabric 固有のウォークスルーについては、&lt;a href="https://devblogs.microsoft.com/azure-sql/azure-data-studio-is-retired-move-your-azure-sql-workflow-to-vs-code-in-10-minutes/"&gt;完全な記事&lt;/a&gt;をご覧ください。&lt;/p&gt;</content:encoded></item><item><title>SQL MCP ServerをAzure App Serviceで動かす — コンテナ不要</title><link>https://thedotnetblog.com/ja/news/emiliano-montesdeoca/sql-mcp-server-azure-app-service-no-containers/</link><pubDate>Tue, 05 May 2026 00:00:00 +0000</pubDate><author>Emiliano Montesdeoca</author><guid>https://thedotnetblog.com/ja/news/emiliano-montesdeoca/sql-mcp-server-azure-app-service-no-containers/</guid><description>SQL MCP ServerがDockerやKubernetesなしでAzure App Serviceで動作するようになりました。SQLデータベースと連携するAIエージェントを構築する.NET開発者にとって何を意味するのかを解説します。</description><content:encoded>&lt;p&gt;&lt;em&gt;この投稿は自動翻訳されました。元の記事は&lt;a href="https://thedotnetblog.com/ja/news/emiliano-montesdeoca/sql-mcp-server-azure-app-service-no-containers/"&gt;こちら&lt;/a&gt;からご覧いただけます。&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;正直に言うと、チュートリアルで「コンテナが必要」という言葉を見るたびに少しため息が出ます。コンテナは素晴らしいのですが、チームにコンテナ戦略がない場合、シンプルに見えた機能が予期しないオーケストレーションの複雑さに阻まれることになります。&lt;/p&gt;
&lt;p&gt;だからこそ、これは注目に値します。SQL MCP ServerがAzure App Serviceで動作するようになりました — DockerもKubernetesも不要で、MCP、REST、GraphQLを通じてSQLデータベースを公開する同じData API Builder（DAB）の設定ファイルだけで動きます。&lt;/p&gt;
&lt;h2 id="sql-mcp-serverとは"&gt;SQL MCP Serverとは？&lt;/h2&gt;
&lt;p&gt;まだご存知でない方への簡単な説明です。SQL MCP ServerはAIエージェントとSQLデータベースの間に位置します。エージェントにデータベースへの直接アクセスを与える（これはひどいアイデアです）代わりに、テーブルやビューを権限が定義されたエンティティという抽象化レイヤーとして公開します。&lt;/p&gt;
&lt;p&gt;&lt;a href="https://learn.microsoft.com/ja-jp/azure/data-api-builder/"&gt;Data API Builder&lt;/a&gt;上に構築されており、1つの設定ファイルがMCP &lt;em&gt;と&lt;/em&gt; REST &lt;em&gt;と&lt;/em&gt; GraphQLを同時に管理します。エージェントはMCPエンドポイントと通信し、従来のアプリケーションはRESTまたはGraphQLと通信します。同じ設定、同じランタイム、異なるインターフェース。&lt;/p&gt;
&lt;p&gt;これは本当に便利です。2つの別々なAPIレイヤーを管理する必要がありません。&lt;/p&gt;
&lt;h2 id="コンテナの問題と解決策"&gt;コンテナの問題（と解決策）&lt;/h2&gt;
&lt;p&gt;SQL MCP Serverの元のデプロイモデルはコンテナでした。多くのチームではうまく機能しますが、すべてのチームではありません。多くの.NETチームはAzure App ServiceやVMに標準化しています。SQLエンドポイントを公開するためだけにコンテナランタイムを必要とするのは、誰も求めていない摩擦を生み出します。&lt;/p&gt;
&lt;p&gt;新しいウォークスルーではコンテナを完全にスキップする方法を示しています。すべて&lt;code&gt;dab start&lt;/code&gt;コマンドで動作し、標準の.NET 8 Webプロセスとして App Serviceにホストされます。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Data API Builderをインストール&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;dotnet tool install microsoft.dataapibuilder --prerelease -g
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 設定を初期化&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;dab init --database-type mssql --host-mode Development --connection-string &lt;span class="s2"&gt;&amp;#34;@env(&amp;#39;SQL_CONNECTION_STRING&amp;#39;)&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# エンティティを追加&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;dab add products --source dbo.products --permissions &lt;span class="s2"&gt;&amp;#34;authenticated:*&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# App Service認証プロバイダーを設定&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;dab configure --runtime.host.authentication.provider AppService
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# サーバーを起動&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;dab start
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;この時点で、&lt;code&gt;/mcp&lt;/code&gt;でMCP、同じプロセスからRESTとGraphQLが利用可能になり、コンテナは一切不要です。&lt;/p&gt;
&lt;h2 id="共有apiキーなしの認証"&gt;共有APIキーなしの認証&lt;/h2&gt;
&lt;p&gt;これが私が最も評価する部分です。App Serviceにデプロイする際、Microsoft Entra IDを認証プロバイダーとして設定します。設定ファイルに共有シークレットを埋め込む必要はなく、APIキーをローテーションする必要もありません。&lt;/p&gt;
&lt;p&gt;接続文字列はApp Serviceの環境変数に保持され（&lt;code&gt;dab-config.json&lt;/code&gt;には含まれません）、MCPエンドポイントはプラットフォーム認証で保護されます。Azure AIのワークロードでEntra IDにすでに対応している場合、これは自然に統合されます。&lt;/p&gt;
&lt;p&gt;ローカル開発では&lt;code&gt;Simulator&lt;/code&gt;モードとSTIOトランスポートに切り替えます。デプロイ前に&lt;code&gt;AppService&lt;/code&gt;モードに戻します。クリーンで明示的な設定です。&lt;/p&gt;
&lt;h2 id="app-serviceへのデプロイ"&gt;App Serviceへのデプロイ&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;az appservice plan create &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; --name &amp;lt;plan-name&amp;gt; &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; --resource-group &amp;lt;resource-group&amp;gt; &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; --sku B1 &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; --is-linux
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;az webapp create &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; --name &amp;lt;app-name&amp;gt; &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; --resource-group &amp;lt;resource-group&amp;gt; &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; --plan &amp;lt;plan-name&amp;gt; &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; --runtime &lt;span class="s2"&gt;&amp;#34;DOTNETCORE:8.0&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;az webapp config &lt;span class="nb"&gt;set&lt;/span&gt; &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; --name &amp;lt;app-name&amp;gt; &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; --resource-group &amp;lt;resource-group&amp;gt; &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; --startup-file &lt;span class="s2"&gt;&amp;#34;dab start&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;その後、チームがすでに使用しているコードデプロイ方法でDABプロジェクトをデプロイします。重要なポイント：これは&lt;strong&gt;コード&lt;/strong&gt;のデプロイであり、コンテナのデプロイではありません。&lt;/p&gt;
&lt;h2 id="net開発者にとって重要な理由"&gt;.NET開発者にとって重要な理由&lt;/h2&gt;
&lt;p&gt;.NETでAIエージェントを構築している場合、エージェントはいずれデータベースと通信する必要があります。SQL MCP Serverは、生の接続文字列を公開したりカスタムAPIレイヤーを書いたりすることなく、それを行う構造化された方法を提供します。&lt;/p&gt;
&lt;p&gt;完全なウォークスルーは&lt;a href="https://devblogs.microsoft.com/azure-sql/sql-mcp-server-app-service/"&gt;元のブログ記事&lt;/a&gt;と&lt;a href="https://github.com/Azure-Samples/SQL-MCP-NoContainer"&gt;GitHubのサンプルリポジトリ&lt;/a&gt;でご確認ください。&lt;/p&gt;
&lt;h2 id="まとめ"&gt;まとめ&lt;/h2&gt;
&lt;p&gt;App Service上のSQL MCP Serverは、コンテナ戦略なしにエージェントに構造化されたSQLデータアクセスを提供したい.NETチームにとって、実用的な選択肢です。ぜひ試してみてください — エージェントはクリーンなAPIサーフェスを高く評価するでしょう。&lt;/p&gt;</content:encoded></item><item><title>SQL Server 2025 エージェント対応データベース：1つのエンジンでセキュリティ、バックアップ、MCP</title><link>https://thedotnetblog.com/ja/news/emiliano-montesdeoca/sql-server-2025-agent-ready-security-mcp/</link><pubDate>Sun, 26 Apr 2026 00:00:00 +0000</pubDate><author>Emiliano Montesdeoca</author><guid>https://thedotnetblog.com/ja/news/emiliano-montesdeoca/sql-server-2025-agent-ready-security-mcp/</guid><description>Polyglot Taxシリーズの最終回は、本番環境の難しい問題に取り組みます：リレーショナル、JSON、グラフ、ベクターデータ全体での統一Row-Level Security、そしてMCP統合。</description><content:encoded>&lt;p&gt;&lt;em&gt;この投稿は自動翻訳されています。オリジナル版は&lt;a href="https://thedotnetblog.com/posts/emiliano-montesdeoca/sql-server-2025-agent-ready-security-mcp/"&gt;こちら&lt;/a&gt;をクリックしてください。&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Aditya BadramrajuのPolyglot Taxシリーズを興味深く読んできました。パート4はシリーズを締めくくり、この架構を本番環境で信頼できるかどうかを実際に決める部分に取り組みます。&lt;/p&gt;
&lt;h2 id="すべてのデータモデルに対する1つのセキュリティモデル"&gt;すべてのデータモデルに対する1つのセキュリティモデル&lt;/h2&gt;
&lt;p&gt;1つのRow-Level Securityポリシーがすべてのデータモデルをカバー。監査人への証明が1つで済む。&lt;/p&gt;
&lt;h2 id="統一バックアップ--アトミックリカバリ"&gt;統一バックアップ = アトミックリカバリ&lt;/h2&gt;
&lt;p&gt;ポリグロットスタックでは、5つのデータベースのPoint-in-Timeリカバリを協調させることは一貫性の悪夢です。1つのデータベースなら、定義上アトミックです。&lt;/p&gt;
&lt;h2 id="mcp統合ハンドコードされたミドルウェア不要"&gt;MCP統合：ハンドコードされたミドルウェア不要&lt;/h2&gt;
&lt;p&gt;SQL Server 2025はSQL MCPサーバーを直接サポート。エージェントはツールを呼び出し、エンジンが自動的にテナント分離とカラムマスキングを強制します。&lt;/p&gt;
&lt;p&gt;オリジナルポスト（Aditya Badramraju著）: &lt;a href="https://devblogs.microsoft.com/azure-sql/the-polyglot-tax-part-4/"&gt;The Polyglot Tax – Part 4&lt;/a&gt;。&lt;/p&gt;</content:encoded></item><item><title>SQL MCP Server — AIエージェントにデータベースアクセスを与える正しい方法</title><link>https://thedotnetblog.com/ja/news/emiliano-montesdeoca/sql-mcp-server-data-api-builder/</link><pubDate>Fri, 10 Apr 2026 00:00:00 +0000</pubDate><author>Emiliano Montesdeoca</author><guid>https://thedotnetblog.com/ja/news/emiliano-montesdeoca/sql-mcp-server-data-api-builder/</guid><description>Data API builderのSQL MCP Serverは、スキーマを公開したりNL2SQLに頼ることなく、AIエージェントに安全で決定的なデータベースアクセスを提供します。RBAC、キャッシュ、マルチデータベース対応 — すべて組み込み済み。</description><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;この記事は自動翻訳されました。原文は&lt;a href="https://thedotnetblog.com/ja/news/emiliano-montesdeoca/sql-mcp-server-data-api-builder/"&gt;こちら&lt;/a&gt;をご覧ください。&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;正直に言いましょう：今日利用可能なほとんどのデータベースMCPサーバーは恐ろしいものです。自然言語のクエリを受け取り、その場でSQLを生成し、本番データに対して実行します。何がうまくいかないでしょうか？（全部です。全部うまくいかない可能性があります。）&lt;/p&gt;
&lt;p&gt;Azure SQLチームが&lt;a href="https://devblogs.microsoft.com/azure-sql/introducing-sql-mcp-server/"&gt;SQL MCP Serverを発表&lt;/a&gt;しましたが、根本的に異なるアプローチを取っています。Data API builder（DAB）2.0の機能として構築され、AIエージェントに構造化された決定的なデータベース操作アクセスを提供します — NL2SQLなし、スキーマの公開なし、そしてすべてのステップで完全なRBAC付き。&lt;/p&gt;
&lt;h2 id="なぜnl2sqlを使わないのか"&gt;なぜNL2SQLを使わないのか？&lt;/h2&gt;
&lt;p&gt;これが最も興味深い設計判断です。モデルは決定的ではなく、複雑なクエリは微妙なエラーを生み出す可能性が最も高いです。ユーザーがAIに生成してほしいと思う正にそのクエリが、非決定的に生成された場合に最も精査が必要なものでもあります。&lt;/p&gt;
&lt;p&gt;代わりに、SQL MCP Serverは&lt;strong&gt;NL2DAB&lt;/strong&gt;アプローチを使用します。エージェントはData API builderのエンティティ抽象化レイヤーと組み込みのクエリビルダーで作業し、正確で整形されたT-SQLを決定的に生成します。ユーザーにとっては同じ結果ですが、幻覚されたJOINや偶発的なデータ漏洩のリスクがありません。&lt;/p&gt;
&lt;h2 id="7つのツール700ではなく"&gt;7つのツール、700ではなく&lt;/h2&gt;
&lt;p&gt;SQL MCP Serverは、データベースのサイズに関係なく、正確に7つのDMLツールを公開します：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;describe_entities&lt;/code&gt; — 利用可能なエンティティと操作を発見&lt;/li&gt;
&lt;li&gt;&lt;code&gt;create_record&lt;/code&gt; — 行を挿入&lt;/li&gt;
&lt;li&gt;&lt;code&gt;read_records&lt;/code&gt; — テーブルとビューをクエリ&lt;/li&gt;
&lt;li&gt;&lt;code&gt;update_record&lt;/code&gt; — 行を変更&lt;/li&gt;
&lt;li&gt;&lt;code&gt;delete_record&lt;/code&gt; — 行を削除&lt;/li&gt;
&lt;li&gt;&lt;code&gt;execute_entity&lt;/code&gt; — ストアドプロシージャを実行&lt;/li&gt;
&lt;li&gt;&lt;code&gt;aggregate_records&lt;/code&gt; — 集計クエリ&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;これは賢明です。コンテキストウィンドウはエージェントの思考空間だからです。何百ものツール定義で氾濫させると、推論のための空間が減ります。7つの固定ツールは、エージェントを&lt;em&gt;ナビゲーション&lt;/em&gt;ではなく&lt;em&gt;思考&lt;/em&gt;に集中させ続けます。&lt;/p&gt;
&lt;p&gt;各ツールは個別に有効化・無効化できます：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-json" data-lang="json"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s2"&gt;&amp;#34;runtime&amp;#34;&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;mcp&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;enabled&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;path&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;/mcp&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;dml-tools&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;describe-entities&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;create-record&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;read-records&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;update-record&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;delete-record&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;execute-entity&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;aggregate-records&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="3つのコマンドで開始"&gt;3つのコマンドで開始&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;dab init &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; --database-type mssql &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; --connection-string &lt;span class="s2"&gt;&amp;#34;@env(&amp;#39;sql_connection_string&amp;#39;)&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;dab add Customers &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; --source dbo.Customers &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; --permissions &lt;span class="s2"&gt;&amp;#34;anonymous:*&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;dab start
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;これでCustomersテーブルを公開するSQL MCP Serverが稼働します。エンティティ抽象化レイヤーにより、名前やカラムにエイリアスを設定し、ロールごとにフィールドを制限し、エージェントが見るものを正確に制御できます — 内部スキーマの詳細を公開することなく。&lt;/p&gt;
&lt;h2 id="セキュリティストーリーは堅実"&gt;セキュリティストーリーは堅実&lt;/h2&gt;
&lt;p&gt;ここがData API builderの成熟さが活きるところです：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;あらゆるレイヤーでRBAC&lt;/strong&gt; — 各エンティティがどのロールが読み取り、作成、更新、削除できるか、どのフィールドが表示されるかを定義&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Azure Key Vault統合&lt;/strong&gt; — 接続文字列とシークレットを安全に管理&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Microsoft Entra + カスタムOAuth&lt;/strong&gt; — 本番グレードの認証&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Content Security Policy&lt;/strong&gt; — エージェントは生のSQLではなく、制御されたコントラクトを通じてやり取り&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;スキーマの抽象化は特に重要です。内部テーブル名やカラム名はエージェントに露出しません。AI対話に意味のあるエンティティ、エイリアス、説明を定義します — データベースのERD図ではなく。&lt;/p&gt;
&lt;h2 id="マルチデータベースとマルチプロトコル"&gt;マルチデータベースとマルチプロトコル&lt;/h2&gt;
&lt;p&gt;SQL MCP ServerはMicrosoft SQL、PostgreSQL、Azure Cosmos DB、MySQLをサポートします。そしてDABの機能であるため、同じ設定からREST、GraphQL、MCPのエンドポイントを同時に取得できます。同じエンティティ定義、同じRBACルール、同じセキュリティ — 3つのプロトコルすべてで。&lt;/p&gt;
&lt;p&gt;DAB 2.0の自動設定は、データベースを検査して設定を動的に構築することもできます。迅速なプロトタイピングのために抽象化を減らしても良い場合に便利です。&lt;/p&gt;
&lt;h2 id="私の見解"&gt;私の見解&lt;/h2&gt;
&lt;p&gt;これがAIエージェント向けのエンタープライズデータベースアクセスのあるべき姿です。「ねぇLLM、SQLを書いてプロダクションにYOLO」ではなく。代わりに：明確に定義されたエンティティレイヤー、決定的なクエリ生成、各ステップでのRBAC、キャッシュ、モニタリング、テレメトリ。最高の意味で退屈です。&lt;/p&gt;
&lt;p&gt;.NET開発者にとって、統合ストーリーはクリーンです — DABは.NETツールで、MCP Serverはコンテナとして動作し、ほとんどの人がすでに使っているAzure SQLで機能します。データアクセスが必要なAIエージェントを構築しているなら、ここから始めましょう。&lt;/p&gt;
&lt;h2 id="まとめ"&gt;まとめ&lt;/h2&gt;
&lt;p&gt;SQL MCP Serverは無料、オープンソースで、どこでも動作します。AIエージェントに安全なデータベースアクセスを提供するためのMicrosoftの規範的アプローチです。始めるには&lt;a href="https://devblogs.microsoft.com/azure-sql/introducing-sql-mcp-server/"&gt;完全な記事&lt;/a&gt;と&lt;a href="https://aka.ms/sql/mcp"&gt;ドキュメント&lt;/a&gt;をご覧ください。&lt;/p&gt;</content:encoded></item></channel></rss>