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

如何通过托管身份从Azure Function连接Azure SQL且连接字符串无凭证

Azure Function(Linux .NET Core 3.x)通过托管身份连接Azure SQL 配置方案

前置依赖修正

  • 完全弃用System.Data.SqlClient,改用Microsoft.Data.SqlClient,版本要求≥2.1.0
  • 额外安装NuGet包Microsoft.Azure.Services.AppAuthentication,用于获取托管身份的访问令牌

正确连接字符串

连接字符串不需要加Authentication参数,配置如下:

Server=tcp:my-database-server.database.windows.net,1433;Database=my-database;Encrypt=Yes;TrustServerCertificate=no;Connection Timeout=30;

必须补充的代码逻辑

Linux环境下无法通过连接字符串参数自动获取托管身份令牌,需要手动获取令牌后赋值给数据库连接对象,示例代码如下:

using Microsoft.Azure.Services.AppAuthentication;
using Microsoft.Data.SqlClient;
using System.Threading.Tasks;

public async Task YourFunctionLogic()
{
    // 获取托管身份的Azure SQL访问令牌
    var tokenProvider = new AzureServiceTokenProvider();
    string sqlAccessToken = await tokenProvider.GetAccessTokenAsync("https://database.windows.net/");

    // 初始化数据库连接
    using var sqlConn = new SqlConnection("你配置的上述连接字符串");
    // 手动绑定访问令牌
    sqlConn.AccessToken = sqlAccessToken;

    await sqlConn.OpenAsync();
    // 后续执行你的数据库操作
}

权限校验项

请确认以下配置没有遗漏:

  1. 执行的数据库用户创建与授权语句正确,示例:
CREATE USER [你的Azure AD组名称] FROM EXTERNAL PROVIDER;
ALTER ROLE db_datareader ADD MEMBER [你的Azure AD组名称];
ALTER ROLE db_datawriter ADD MEMBER [你的Azure AD组名称];
  1. Function应用的系统分配托管身份已成功加入该Azure AD组,组权限生效最多有2分钟延迟,刚加入可稍等后再测试。

之前尝试失败的原因说明

  • 无身份信息的连接字符串:没有携带任何验证凭据,数据库无法识别访问身份,因此报Login failed for user ''
  • 使用System.Data.SqlClient加Authentication参数:该类库原生不支持Azure AD验证相关的参数,因此报关键字不支持错误
  • 加Authentication=Active Directory Integrated参数:该参数仅适用于Windows环境下的AD用户验证场景,Linux环境下MSAL无法自动获取当前用户身份信息,因此报UPN相关错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 05:45:03