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团队提交支持请求,但未得到解决方案。
技术问询
- 是否有人遇到过Azure Functions通过托管身份连接Azure SQL时出现间歇性
Login failed for user '<token-identified principal>'错误的情况? - 过期的Entra令牌或SQL连接池是否会导致此类问题?
- 若使用系统分配托管身份的部署槽位,是否需要为以下两者分别创建SQL用户:
function-app-namefunction-app-name/slots/staging
- 是否有Azure诊断或SQL诊断工具可帮助识别失败发生在以下哪个阶段:
- 令牌获取阶段
- SQL登录验证阶段
- 连接池复用阶段
- 是否存在可能导致该问题的代码层面原因?
内容的提问来源于stack exchange,提问作者John McArthur
相关产品推荐
相关产品推荐

