You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为.NET Core 5 Worker Service配置无密码Azure SQL连接字符串

无密码连接Azure SQL适配.NET Core 5 Worker Service方案

1. 为部署VM配置托管身份

托管身份完全支持部署在Azure VM上的服务使用,针对多VM部署场景可选择两种配置方案:

  • 系统分配托管身份:进入每台目标VM的Azure门户「标识」页面,开启系统分配托管身份,保存后记录生成的客户端ID,该身份与VM生命周期绑定。
  • 用户分配托管身份:(推荐多VM部署场景使用,仅需一次授权即可被所有关联该身份的VM复用,降低运维成本) 先在Azure AD中创建独立的用户分配托管身份资源,再将该身份关联到所有需要部署服务的VM上,记录该身份的客户端ID即可。

2. 为托管身份授予SQL数据库权限

使用具备SQL管理员权限的账号登录目标Azure SQL数据库,执行以下命令完成授权:

-- 创建托管身份对应的数据库用户
CREATE USER [你的托管身份名称] FROM EXTERNAL PROVIDER;
-- 按需授予对应权限,示例为读写权限
ALTER ROLE db_datareader ADD MEMBER [你的托管身份名称];
ALTER ROLE db_datawriter ADD MEMBER [你的托管身份名称];

3. 构造连接字符串与代码适配

首先将项目依赖的Microsoft.Data.SqlClient NuGet包升级到3.0及以上版本,直接使用以下无账号密码的连接字符串即可:

Server=tcp:<你的SQL服务器名>.database.windows.net,1433;Initial Catalog=<你的数据库名>;Encrypt=True;TrustServerCertificate=False;Connection Timeout=30;Authentication=Active Directory Default;

配置完成后无需额外编写令牌获取逻辑,驱动会自动从VM的托管身份端点获取、刷新有效访问令牌,代码中直接正常使用SqlConnection或者EF Core即可。

如果无法升级SqlClient版本,可以手动获取令牌注入连接:

using Azure.Identity;
using Microsoft.Data.SqlClient;

// 连接字符串无需包含账号密码、Authentication参数
var connectionString = "Server=tcp:<你的SQL服务器名>.database.windows.net,1433;Initial Catalog=<你的数据库名>;Encrypt=True;TrustServerCertificate=False;Connection Timeout=30;";
await using var conn = new SqlConnection(connectionString);
// 自动读取VM的托管身份获取访问令牌
conn.AccessToken = await new DefaultAzureCredential().GetTokenAsync(new TokenRequestContext(new[] { "https://database.windows.net/.default" }));
// 后续正常打开连接执行SQL操作即可
await conn.OpenAsync();

4. 本地调试适配

本地开发时,只要你登录Visual Studio/VS Code/Azure CLI使用的Azure账号已经被授予该SQL数据库的对应权限,上述连接字符串和代码无需修改即可正常运行,不需要本地配置任何账号密码。

内容的提问来源于stack exchange,提问作者Learner

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 05:06:04