名称: 设置-dab 描述: 安装和配置Data API Builder (DAB) 用于生产级SQL Server MCP访问与RBAC 参数提示: “[–init] [–add <实体>] [–verify]” 允许工具: Bash, Read, Write, Edit, AskUserQuestion
/microsoft:setup-dab
安装和配置Microsoft Data API Builder (DAB) 用于生产就绪的SQL Server MCP集成。
概述
Data API Builder (DAB) 为SQL Server提供生产级MCP服务器,具有:
- RBAC: 基于角色的实体访问控制
- 缓存: 自动结果缓存
- 遥测: 内置可观察性
- 确定性查询: NL2DAB替代脆弱的NL2SQL
参数
从$ARGUMENTS解析参数:
| 标志 | 描述 | 默认值 |
|---|---|---|
--init |
初始化新的DAB配置 | false |
--add <实体> |
向配置中添加实体 | (无) |
--verify |
验证现有设置 | false |
先决条件
- .NET 8 SDK 或更高版本
- 可访问连接字符串的SQL Server数据库
- 要公开为实体的表/视图
工作流程
步骤 1: 检查DAB安装
# 检查DAB是否全局安装
dotnet tool list -g | grep -i dataapibuilder
# 检查版本
dab --version
如果未安装:
未找到Data API Builder。
正在全局安装DAB...
dotnet tool install -g microsoft.dataapibuilder --prerelease
注意:使用--prerelease以获取最新MCP功能。
安装命令:
dotnet tool install -g microsoft.dataapibuilder --prerelease
步骤 2: 初始化配置 (–init)
如果指定--init或不存在dab-config.json:
DAB配置向导
Data API Builder需要实体配置以保障安全。
与原始SQL访问不同,DAB仅公开预批准的实体。
连接字符串设置
-----------------------
输入您的SQL Server连接字符串(将存储为环境变量引用):
使用AskUserQuestion获取连接字符串方法:
您希望如何配置连接字符串?
选项:
1. 环境变量(推荐)- 引用$DAB_CONNECTION_STRING
2. 直接输入 - 存储在dab-config.json中(安全性较低)
使用环境变量初始化:
dab init --database-type mssql --connection-string "@env('DAB_CONNECTION_STRING')" --config dab-config.json
步骤 3: 添加实体
提示用户添加实体:
实体配置
--------------------
DAB需要为每个要公开的表/视图定义明确实体。
您希望:
1. 现在添加一个实体
2. 跳过(稍后配置)
如果添加实体:
实体详情
表/视图名称(例如,dbo.Products):
实体名称(例如,Products):
权限:
- anonymous:read(只读,无需认证)
- anonymous:*(完全访问,无需认证)
- authenticated:read(只读,需要认证)
- authenticated:*(完全访问,需要认证)
添加实体命令:
# 只读访问
dab add Products --source dbo.Products --permissions "anonymous:read"
# 完全CRUD访问
dab add Products --source dbo.Products --permissions "anonymous:*"
# 指定操作
dab add Products --source dbo.Products --permissions "anonymous:read,create"
步骤 4: 验证配置 (–verify)
如果指定--verify:
# 检查配置文件
cat dab-config.json
# 验证配置
dab validate --config dab-config.json
# 检查环境变量
echo $DAB_CONNECTION_STRING
报告状态:
DAB配置验证
配置文件: dab-config.json
验证: 通过
数据库类型: mssql
连接: @env('DAB_CONNECTION_STRING')
实体:
- Products (dbo.Products) - anonymous:read
- Orders (dbo.Orders) - anonymous:read
- Customers (dbo.Customers) - authenticated:*
环境:
DAB_CONNECTION_STRING: 已设置
状态: 准备启动
步骤 5: 配置Claude代码
DAB默认未启用在插件中。将mssql-dab添加到项目的.claude/settings.json:
{
"mcpServers": {
"mssql-dab": {
"type": "http",
"url": "http://localhost:5000/mcp"
}
}
}
或在全局启用,添加到~/.claude.json的mcpServers下。
步骤 6: 启动说明
设置完成 - 启动DAB
重要:DAB使用HTTP传输。您必须单独启动DAB。
启动DAB服务器(在单独终端运行):
# 设置连接字符串(如果未在配置文件中)
export DAB_CONNECTION_STRING="Server=localhost;Database=test;..."
# 启动DAB - 这运行一个Web服务器,在/mcp暴露MCP
dab start --config dab-config.json
# DAB默认监听http://localhost:5000
# MCP端点: http://localhost:5000/mcp
可用MCP工具(一旦DAB运行):
- describe_entities - 列出可用实体和属性
- create_record - 插入新数据
- read_records - 查询数据(自动缓存)
- update_record - 修改数据
- delete_record - 删除数据
- execute_entity - 执行存储过程
输出格式
安装成功:
Data API Builder设置
阶段1: 安装
检查全局工具...
未找到DAB,正在安装...
dotnet tool install -g microsoft.dataapibuilder --prerelease
已安装: microsoft.dataapibuilder 2.0.0-preview
阶段2: 配置
数据库类型: mssql
连接: @env('DAB_CONNECTION_STRING')
配置文件: dab-config.json
阶段3: 实体
尚未配置任何实体。
添加实体:
dab add <实体名称> --source <架构.表> --permissions "anonymous:read"
示例:
dab add Products --source dbo.Products --permissions "anonymous:read"
dab add Orders --source dbo.Orders --permissions "authenticated:*"
设置完成
需要环境变量:
DAB_CONNECTION_STRING="Server=...;Database=...;..."
测试:
dab start --config dab-config.json
/microsoft:mssql status --dab
验证输出:
DAB配置验证
配置: dab-config.json
数据库: mssql
连接: @env('DAB_CONNECTION_STRING')
主机模式: 开发
实体(3):
实体 来源 权限
----------- -------------- ---------------
Products dbo.Products anonymous:read
Orders dbo.Orders anonymous:read
Customers dbo.Customers authenticated:*
环境:
DAB_CONNECTION_STRING: 已配置
验证: 通过
准备启动: dab start --config dab-config.json
DAB配置文件
示例dab-config.json:
{
"$schema": "https://github.com/Azure/data-api-builder/releases/latest/download/dab.draft.schema.json",
"data-source": {
"database-type": "mssql",
"connection-string": "@env('DAB_CONNECTION_STRING')"
},
"runtime": {
"rest": { "enabled": true },
"graphql": { "enabled": true }
},
"entities": {
"Products": {
"source": "dbo.Products",
"permissions": [{
"role": "anonymous",
"actions": ["read"]
}]
}
}
}
示例
# 安装DAB并创建初始配置
/microsoft:setup-dab --init
# 添加具有只读访问权限的实体
/microsoft:setup-dab --add Products
# 验证现有配置
/microsoft:setup-dab --verify
手动命令
如果您喜欢手动设置:
# 安装DAB
dotnet tool install -g microsoft.dataapibuilder --prerelease
# 初始化配置
dab init --database-type mssql --connection-string "@env('DAB_CONNECTION_STRING')"
# 添加实体
dab add Products --source dbo.Products --permissions "anonymous:read"
dab add Orders --source dbo.Orders --permissions "authenticated:read,create"
# 验证
dab validate
# 启动
dab start
环境变量
| 变量 | 必需 | 描述 |
|---|---|---|
DAB_CONNECTION_STRING |
是 | SQL Server连接字符串(由dab start使用) |
DAB_CONFIG_PATH |
否 | dab-config.json路径(默认: ./dab-config.json) |
DAB_MCP_URL |
否 | MCP端点URL(默认: http://localhost:5000/mcp) |
连接字符串示例
# 本地SQL Server与Windows认证
DAB_CONNECTION_STRING="Server=localhost;Database=MyDb;Trusted_Connection=True;TrustServerCertificate=True"
# Azure SQL与AD交互式认证
DAB_CONNECTION_STRING="Server=tcp:myserver.database.windows.net,1433;Database=MyDb;Authentication=Active Directory Interactive"
# SQL Server与用户名/密码
DAB_CONNECTION_STRING="Server=localhost;Database=MyDb;User Id=sa;Password=YourPassword;TrustServerCertificate=True"
安全最佳实践
- 使用环境变量处理连接字符串
- 最小权限原则 - 仅公开必要实体
- 尽可能使用只读权限
- 为敏感数据启用认证
- 在生产部署前审查权限
# 良好: 只读,特定实体
dab add Products --source dbo.Products --permissions "anonymous:read"
# 风险: 对所有操作完全访问
dab add AllData --source dbo.SensitiveTable --permissions "anonymous:*"
故障排除
DAB安装失败:
如果dotnet工具安装失败:
1. 检查是否安装.NET 8+: dotnet --version
2. 清除NuGet缓存: dotnet nuget locals all --clear
3. 检查网络/代理设置
4. 尝试不使用--prerelease以获取稳定版本
连接失败:
如果DAB无法连接:
1. 验证连接字符串格式
2. 检查SQL Server是否运行
3. 验证防火墙是否允许连接
4. 测试: sqlcmd -S <服务器> -d <数据库>
实体添加失败:
如果dab add失败:
1. 验证表/视图是否存在数据库中
2. 检查架构名称(dbo.表名 而非仅表名)
3. 确保用户对表有SELECT权限
DAB vs MssqlMcp
| 功能 | DAB | MssqlMcp |
|---|---|---|
| 访问控制 | RBAC,实体级别 | 仅连接级别 |
| 查询类型 | NL2DAB(确定性) | NL2SQL(脆弱) |
| 生产就绪 | 是 | 实验性 |
| 设置复杂性 | 较高(实体配置) | 较低(仅连接) |
| 缓存 | 内置 | 无 |
| 最佳适用 | 生产应用 | 快速探索 |
相关命令
/microsoft:mssql- 管理MssqlMcp服务器(状态、重建、更新)