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

本地Function App无法通过托管标识连接Azure SQL求助

本地Function App连接Azure SQL的问题解决

错误原因分析

本地环境没有Azure云服务专属的元数据服务(169.254.169.254是Azure实例用于获取身份令牌的地址),因此使用Active Directory Managed Identity认证方式时,本地运行的函数无法获取托管标识的访问令牌,导致连接失败。托管标识是Azure资源的专属身份,仅在Azure环境中生效,本地开发需要改用其他兼容的AD认证方式。

解决方案

1. 修改连接字符串为本地兼容的AD认证方式

将连接字符串中的Authentication=Active Directory Managed Identity替换为Active Directory Default,本地会自动使用你已登录的Entra ID凭证(Azure CLI、Visual Studio或系统缓存的账号):

"Server=tcp:xxxxxxxx-001.database.windows.net;Database=xxxxxxxxxxxx-centralus-001;Authentication=Active Directory Default;"

2. 确保本地已登录有权限的Entra ID账号

  • 使用Azure CLI的话,运行命令登录你添加到数据库的账号:
    az login
    
  • 使用Visual Studio的话,确保已登录同一个Entra ID账号,并且在函数项目的调试配置中选择该账号。

3. 验证数据库用户配置

执行SQL查询确认用户已正确创建并分配角色:

SELECT name, type_desc FROM sys.database_principals WHERE name = 'xxxxxx.com';
SELECT dp.name, dr.name FROM sys.database_role_members drm
JOIN sys.database_principals dp ON drm.member_principal_id = dp.principal_id
JOIN sys.database_principals dr ON drm.role_principal_id = dr.principal_id
WHERE dp.name = 'xxxxxx.com';

确认结果中包含db_datareader和db_datawriter角色。

4. 升级相关NuGet包(可选)

对于.NET 8环境,确保Microsoft.Data.SqlClient包是最新版本(EF Core SqlServer依赖该包处理AD认证),可以安装或升级:

Install-Package Microsoft.Data.SqlClient -Version 5.2.0

5. 检查本地调试配置

确保local.settings.json中的AzureWebJobsStorage配置有效(函数运行必需),且没有其他干扰AD认证的环境变量。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 09:22:44