使用说明
1.目标
您已经有了SQL数据库,并准备好了表,您想知道如何创建SQL MCP服务器,以及如何在构建后运行服务器?
本文以Fabric SQL数据库为例,给出了从设置客户端服务主体、RBAC、DAB配置到启动SQL MCP服务器并运行服务器的完整步骤。
代码示例如下:https://github.com/helenzusa1/sql-mcp-server
此回购中提供的解决方案是为向多租户方向发展而准备的。
1.1隔离策略
这支持多种隔离策略,具体取决于架构:
多实例隔离
每个租户使用单独的SQL数据库和连接字符串。这是一种部署级隔离策略。
基于身份的访问控制(RBAC)
多个租户共享相同的SQL数据库和MCP服务器,但使用不同的Microsoft Entra身份进行身份验证。
SQL权限限制了每个租户可以执行哪些表或操作。
真正的服务器端多租户(推荐)
该存储库侧重于为隔离奠定基础,并旨在在实现以下条件时演变为真正的多租户:
所有租户共享相同的数据库和MCP服务器。
通过使用TenantId列,结合SQL行级安全性(RLS)、视图或存储过程,在服务器端强制实施租户隔离。
真正的服务器端多租户需要显式配置。DAB/SQL MCP Server不会自动按租户限定请求范围,除非您实现:(1)Entra身份验证,(2)角色/声明映射或策略,以及(3)数据库强制,如行级安全性(RLS)、租户筛选视图或存储过程。然后,MCP层可以依靠这些策略来确保租户隔离。
2.准备工作
Microsoft Fabric中的SQL数据库。
一些桌子。在这个例子中,有三个表:products、orders和order_details。
VS代码工作室与Powershell。
在Microsoft Entra ID中注册的应用程序,具有应用程序ID、租户ID和秘密值。此应用程序将用作租户,演示如何为多租户场景做准备。
3.成果
DAB正在运行,您可以通过Swagger(REST)和GraphQL工具验证端点。DAB根据您的配置公开REST和GraphQL端点。您看到的“UI”是Swagger/OpenAPI体验(用于REST)和GraphQL游乐场,而不是自定义数据库UI。您可以通过Swaggr UI检索表,并在GraphQL中运行查询。
SQL MCP服务器已准备好包含在AI代理中。
步骤提供了精确的powershell命令供用户遵循。
4.步骤
步骤0-安装DAB工具
在Powershell中:
dotnet new tool-manifest
dotnet tool install microsoft.dataapibuilder --prerelease
dotnet tool restore
dotnet dab --version
在此之后,您应该看到在项目文件夹下创建的.config子文件夹,以及在.config中创建的dotnet-tools.json。
步骤1-注册Entra应用程序(服务主体),代表用户
在Microsoft Entra ID中注册应用程序:sql msp服务器
应用程序(客户端)ID:yyyyyyyy-yyyyyyyy-yyyyyy-yyyyyy
应用程序秘密值(不使用秘密ID):zzzzzzzzz
授予结构工作区权限
添加您的应用程序sql mcp服务器
角色:贡献者(SQL数据库访问的最低要求)
步骤2-授予应用程序SQL权限
--创建Entra支持的数据库用户,在fabric sql查询中运行:
CREATE USER [sql-mcp-server] FROM EXTERNAL PROVIDER;
GO
--授予读/写权限
ALTER ROLE db_datareader ADD MEMBER [sql-mcp-server];
ALTER ROLE db_datawriter ADD MEMBER [sql-mcp-server];
仅当需要更改架构或管理操作时,才更改db_owner。
ALTER ROLE db_owner ADD MEMBER [sql-mcp-server];
GO
此图像中显示了权限示例。 和
步骤3-构建服务主体连接字符串
$Env:SQL_CONNECTION_STRING = `
"Server=tcp:xxxx.database.fabric.microsoft.com,1433;
Database=example_sql_db-xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx;
Encrypt=True;
TrustServerCertificate=False;
Authentication=Active Directory Service Principal;
User Id=yyyyyyyy-yyyy-yyyy-yyyy-yyyyyyyyyyyy;
Password=zzzzzzzzzzz"
步骤 4 - 初始化 DAB 配置
从结构中的SQL数据库中获取这些数据,ADO。NET连接字符串:
在Powershell中:
dab init --database-type mssql --host-mode Development --connection-string "$Env:SQL_CONNECTION_STRING"
如果失败,请运行以下命令:
dotnet tool run dab init --database-type mssql --host-mode Development --connection-string "$Env:SQL_CONNECTION_STRING"
在此之后,您应该看到dab-config.json已在您的项目文件夹中创建。
您应该只初始化DAB一次,然后更新表键字段权限。对于“连接字符串”,您可以使用完整的参数值,也可以使用@env('SQL_CONNECION_string')。
{
"$schema": "https://github.com/Azure/data-api-builder/releases/download/v1.7.86/dab.draft.schema.json",
"data-source": {
"database-type": "mssql",
"connection-string": "@env('SQL_CONNECTION_STRING')",
"options": {
"set-session-context": false
}
},
"runtime": {
"rest": {
"enabled": true,
"path": "/api",
"request-body-strict": true
},
"graphql": {
"enabled": true,
"path": "/graphql",
"allow-introspection": true
},
"mcp": {
"enabled": true,
"path": "/mcp"
},
"host": {
"cors": {
"origins": [],
"allow-credentials": false
},
"authentication": {
"provider": "AppService"
},
"mode": "development"
}
},
"entities": {
"products": {
"source": {
"object": "dbo.products",
"type": "table",
"key-fields": ["ProductID"]
},
"permissions": [
{ "role": "authenticated", "actions": [{ "action": "*" }] }
]
},
_**** same for other tables.
}
}
步骤5-启动DAB(HTTP或STDIO)
启动DAB有两种方法:
dotnet tool run dab start
-- This will start MCP in HTTP mode.
dotnet tool run dab start --mcp-stdio role:anonymous
-- This will start MCP in Stdio mode.
如果您在dab-config.json中使用@env('SQL_CONNECTION.STRING')作为“连接字符串”,那么每次启动dab之前,您都需要设置$env:stringCONNECTION_STRING。
步骤6-REST API
在以HTTP或STDIO模式启动DAB后,您可以启动Swagger UI,如图所示。
http://localhost:5000/api/products
http://localhost:5000/api/orders
http://localhost:5000/api/order_details
图查询语言
http://localhost:5000/graphql
尝试以下操作:
query {
products {
items {
ProductID,
ProductName
}
}
}
但是,对于HTTP和STDIO模式,运行MCP服务器的方法是不同的。
步骤7-如何运行和使用MCP服务器
请参考https://github.com/helenzusa1/sql-mcp-server/blob/main/How-to-Run-MCP.md