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

Azure Functions托管身份连接Azure SQL间歇性登录失败技术问询

间歇性Azure Functions托管身份连接Azure SQL认证失败问题排查

我们有一个基于.NET 8独立模式的Azure Functions应用,通过托管身份结合Microsoft Entra认证连接Azure SQL数据库。近几个月来遭遇间歇性认证失败问题,始终无法定位根因。该问题最初仅出现在DEV环境,近期已扩散至TEST环境。

环境信息

  • Azure Functions(.NET 8 独立模式)
  • Azure SQL Database
  • 使用托管身份的Microsoft Entra认证
  • 已启用部署槽位
  • EF Core使用AddDbContextFactory,代码如下:
services.AddDbContextFactory<MyContext>(options =>
{
    options.UseSqlServer(connectionString, sql =>
        sql.EnableRetryOnFailure(
            maxRetryCount: 5,
            maxRetryDelay: TimeSpan.FromSeconds(10),
            errorNumbersToAdd: null));
});

SQL用户由外部提供商创建,并已授予所需数据库权限。

反复出现的错误

Microsoft.Data.SqlClient.SqlException (0x80131904):
Login failed for user '<token-identified principal>'.

问题特征

  • 应用可连续正常运行数天甚至数周
  • 无部署或配置变更的情况下突然出现错误
  • 某受影响的Function App首次出现问题时已近四个月未部署
  • 问题仅影响部分Function App,其余仍正常运行
  • 将Function App迁移至不同的应用服务计划无法解决问题
  • 交换部署槽位有时可暂时解决问题
  • 重启Function App在部分情况下有效

已完成的排查动作

  • 验证数据库权限
  • 确认托管身份已存在于数据库中
  • 创建Azure SQL服务器和数据库副本,并通过托管身份成功连接
  • 对比生产环境与部署槽位配置,未发现显著差异
  • 对比槽位间的应用设置、连接字符串、身份、运行时版本及网络设置

此外,我们创建了SQL用户名/密码登录,将应用切换为SQL认证而非托管身份后,应用保持稳定,问题未再出现。这表明问题与Entra/托管身份认证直接相关,而非通用SQL连接问题。我们已向Azure数据库和Function App团队提交支持请求,但未得到解决方案。

技术问询

  1. 是否有人遇到过Azure Functions通过托管身份连接Azure SQL时出现间歇性Login failed for user '<token-identified principal>'错误的情况?
  2. 过期的Entra令牌或SQL连接池是否会导致此类问题?
  3. 若使用系统分配托管身份的部署槽位,是否需要为以下两者分别创建SQL用户:
    • function-app-name
    • function-app-name/slots/staging
  4. 是否有Azure诊断或SQL诊断工具可帮助识别失败发生在以下哪个阶段:
    • 令牌获取阶段
    • SQL登录验证阶段
    • 连接池复用阶段
  5. 是否存在可能导致该问题的代码层面原因?

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 08:12:40