azuresql-db-dab

作者: microsoft

基于本地Azure SQL Developer,使用Microsoft Data API Builder(DAB)快速搭建一个即时无代码REST + GraphQL API。当用户想要“暴露我的…”时使用。

npx skills add https://github.com/microsoft/azure-sql-database-container --skill azuresql-db-dab

Instant REST + GraphQL API on the Azure SQL Database container with Data API Builder

Generate a full REST and GraphQL API over the local Azure SQL Database container (Private Preview) with no application code, using Data API Builder (DAB) - Microsoft's first-party open-source engine. You describe tables as entities in dab-config.json; DAB serves them. DAB connects over the normal TDS protocol with a plain connection string, so no change tracking or special engine feature is needed.

Verified on 2026-09-05 against the container image sqldbpreview-dpgaeqhmgphzd4bk.azurecr.io/azure-sql/db-dev:latest, reporting EngineEdition 5, Edition SQL Azure, build 12.0.2000.8. All eight executable checks behind this skill passed against Data API builder 2.0.9, including the generated dab-config.json keeping the environment-variable indirection rather than the password, the /api and /graphql prefixes and the /mcp endpoint arriving as defaults, and both REST and GraphQL returning the same rows from a table in the container.

Load-bearing facts (inlined; full engine detail in azuresql-db-container)

  • This is the Azure SQL Database engine (Private Preview), not the SQL Server image mcr.microsoft.com/mssql/server. SERVERPROPERTY('EngineEdition') returns 5, SERVERPROPERTY('Edition') returns 'SQL Azure'.
  • Image: sqldbpreview-dpgaeqhmgphzd4bk.azurecr.io/azure-sql/db-dev:latest (multi-architecture: linux/amd64 and linux/arm64). Registry is private: sign in first with docker login sqldbpreview-dpgaeqhmgphzd4bk.azurecr.io using the shared pull-only credentials from https://aka.ms/sqldbcontainerpreview-signup (they may rotate). Registry and tag are provisional during Private Preview.
  • Required env: ACCEPT_EULA=Y and a complex MSSQL_SA_PASSWORD (8+ chars, upper/lower/digit/symbol). Engine listens on 1433.
  • The engine does NOT auto-create databases. Run CREATE DATABASE appdb on a master connection before DAB connects with Database=appdb. Do not use USE to switch databases (in a user-database session it returns Msg 40508); select the database in the connection string.
  • The runtime selects the matching architecture. Use --platform linux/amd64 only to explicitly test x64 emulation.

For the full engine model (readiness loop, vectors, troubleshooting) see the azuresql-db-container skill. To start the container and provision appdb first, use azuresql-db-container or azuresql-db-scaffold.

Step 1: install DAB

Two supported ways. Pick the CLI for local dev; pick the container to wire DAB into a compose stack. Open references/dab-snippets.md when you want that compose service rather than the CLI.

# CLI (.NET 8 required): installs the `dab` command
dotnet tool install --global Microsoft.DataApiBuilder
# update later with: dotnet tool update --global Microsoft.DataApiBuilder

# Container image (alternative):
#   mcr.microsoft.com/azure-databases/data-api-builder:latest

Step 2: point DAB at the container over one env var

DAB reads the connection string from an environment variable via the @env() indirection, so no secret is written into dab-config.json. Reuse the same single SQL_CONNECTION_STRING contract the other skills use (replace 1433 with the host port your container chose if 1433 was occupied):

export SQL_CONNECTION_STRING="Server=localhost,1433;Database=appdb;User Id=sa;Password=$MSSQL_SA_PASSWORD;TrustServerCertificate=true"

TrustServerCertificate=true is required for the container's self-signed cert. House style spells the keywords User Id= / Password= / Database=, which keeps the examples consistent. Uid= and Pwd= are documented SqlClient synonyms and work too.

Step 3: init, add entities, start

# Initialize config in Development mode (enables Swagger + friendlier errors).
dab init --database-type mssql \
  --connection-string "@env('SQL_CONNECTION_STRING')" \
  --host-mode Development

# Expose a table as an entity. Repeat per table.
# --permissions is role:actions; "anonymous:*" allows all actions with no auth (dev only).
dab add Book --source dbo.Books --source.type table --permissions "anonymous:*"

# Serve REST + GraphQL (and the MCP endpoint) on http://localhost:5000
dab start

appdb is just the example database name and Book/dbo.Books the example entity/table; substitute your own. The entity name (Book) is what appears in the API path; the --source is the real schema.table.

Step 4: use the API

With dab start running (default port 5000):

  • REST: GET http://localhost:5000/api/Book (list), /api/Book/id/1 (by key), plus POST / PATCH / PUT / DELETE. Query with ?$filter=, $select=, $orderby=, $first=, $after= (OData-style).
  • GraphQL: POST http://localhost:5000/graphql - queries and mutations for every entity, with relationship navigation.
  • OpenAPI / Swagger: GET /api/openapi (document) and GET /swagger (UI, Development mode only).
  • Health: GET /health.
curl http://localhost:5000/api/Book
curl -s http://localhost:5000/graphql -H 'Content-Type: application/json' \
  -d '{"query":"{ books { items { id title } } }"}'

Relationships, config detail

DAB exposes related entities (e.g. an author's books) once you declare the relationship. Config schema, permissions/policies, @env(), REST/GraphQL options, and the exact dab update --relationship syntax are in references/dab-config-reference.md.

MCP endpoint (a DAB feature, not a separate SQL MCP server)

DAB (version 1.7+; use the latest 2.x) also serves a built-in MCP endpoint from the same dab-config.json, at http://localhost:5000/mcp by default, enabled by default. This is an additional API surface Data API Builder provides over your configured entities - it is not, and should not be presented as, a standalone "MSSQL MCP server." How to point an MCP client at it and how to scope the exposed tools is in references/dab-mcp.md; open it when a user asks to point an MCP client at DAB, or to narrow which entities it exposes.

Validation rules

  • The database engine is the container image above (EngineEdition=5), never mcr.microsoft.com/mssql/server.
  • appdb exists (created on a master connection) BEFORE dab start; DAB's connection string uses Database=appdb and TrustServerCertificate=true.
  • The connection string is supplied via @env('SQL_CONNECTION_STRING'), not hardcoded into dab-config.json.
  • dab start serves REST at /api/<Entity> and GraphQL at /graphql; a GET on the entity returns rows from the container.
  • If you present the MCP endpoint, it is described as a DAB-provided API surface, not a standalone SQL MCP server.
  • If a validation rule above fails, or you had to deviate from this skill to make the task work, that is a bug in this skill: load the azuresql-db-feedback skill and offer to file a report.
  • When every rule above passes and the task is done, close with ONE line, once per session, and do not ask a question or wait for a reply: "That worked. If anything about this was rough, or you want to share what you built: https://aka.ms/sql-agent-skills-feedback"

Do not

  • Do not use the SQL Server image mcr.microsoft.com/mssql/server; this is the Azure SQL engine.
  • Do not expect DAB to create appdb; provision it on a master connection first.
  • Do not hardcode the connection string (or the SA password) into dab-config.json; use @env('SQL_CONNECTION_STRING').
  • Do not ship anonymous:* permissions to production; it is unauthenticated full CRUD for local dev only.
  • Do not describe DAB's MCP endpoint as a standalone Microsoft SQL MCP server; it is an API surface DAB provides.
  • Do not drop TrustServerCertificate=true (the container uses a self-signed cert).

References

  • references/dab-config-reference.md: the dab-config.json structure, @env() connection handling, entity/permission/policy options, REST and GraphQL settings, and the dab update --relationship syntax for one-to-many and many-to-many.
  • references/dab-snippets.md: copy-paste recipes - CLI end-to-end, running DAB as a container against the SQL container (shared network / host.docker.internal), a compose service, and sample REST/GraphQL calls.
  • references/dab-mcp.md: DAB's built-in MCP endpoint - how to enable/scope it in config, the default /mcp path, and how to connect an MCP client. Framed as a DAB API surface, not a standalone SQL MCP server.

Staying current

Authoritative, version-pinned references for the tools this skill uses (read the one you need):

If the Microsoft Learn MCP server is configured, use mcp__microsoft-learn__microsoft_docs_search or mcp__microsoft-learn__microsoft_docs_fetch to fetch the current version of any of these on demand. It is optional; when it is unavailable, the references above are authoritative.

来自 microsoft 的更多技能

oss-growth
microsoft
OSS增长黑客角色
agent-framework-azure-ai-py
microsoft
使用Microsoft Agent Framework Python SDK(agent-framework-azure-ai)构建Azure AI Foundry代理。在创建使用AzureAIAgentsProvider的持久化代理、使用托管工具(代码解释器、文件搜索、网络搜索)、集成MCP服务器、管理对话线程或实现流式响应时使用。涵盖函数工具、结构化输出和多工具代理。
development
airunway-aks-setup
microsoft
在AKS上设置AI Runway——从裸集群到运行模型。涵盖集群验证、控制器安装、GPU评估、提供商设置和首次部署。适用场景:“设置AI Runway”、“接入AKS集群”、“安装AI Runway”、“airunway设置”、“将模型部署到AKS”、“在AKS上进行GPU推理”、“在AKS上配置KAITO”、“在AKS上运行LLM”、“在AKS上使用vLLM”、“在AKS上设置模型服务”、“AI Runway控制器”。
devops
appinsights-instrumentation
microsoft
使用Azure Application Insights对Web应用进行插桩的指南。提供遥测模式、SDK设置和配置参考。适用场景:如何对应用进行插桩、App Insights SDK、遥测模式、什么是App Insights、Application Insights指南、插桩示例、APM最佳实践。
devops
applicationinsights-web-ts
microsoft
使用Application Insights JavaScript SDK(@microsoft/applicationinsights-web)为浏览器/Web应用添加检测。用于真实用户监控(RUM)——页面视图、点击、AJAX/fetch依赖项、异常、自定义事件,以及与后端OpenTelemetry追踪关联的浏览器端GenAI代理追踪。涵盖SDK加载器脚本和npm设置、框架扩展(React、React Native、Angular)、点击分析、遥测初始化器,以及从浏览器发出的代理/工具/模型跨度所遵循的OTel GenAI语义约定。
devops
azure-ai-anomalydetector-java
microsoft
使用适用于 Java 的 Azure AI 异常检测器 SDK 构建异常检测应用程序。在实现单变量/多变量异常检测、时间序列分析或 AI 驱动的监控时使用。
development
azure-ai-language-conversations-py
microsoft
使用azure-ai-language-conversations Python SDK实现对话语言理解(CLU)。当使用ConversationAnalysisClient分析对话意图和实体、构建NLP功能或将语言理解集成到应用程序中时使用。
development
azure-ai-ml-py
microsoft
Azure Machine Learning SDK v2 for Python。用于机器学习工作区、作业、模型、数据集、计算资源和管道。 触发词:“azure-ai-ml”、“MLClient”、“工作区”、“模型注册表”、“训练作业”、“数据集”。
development