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

使用Azure System Managed Identity连接数据库失败:.NET应用问题咨询

使用Azure系统托管标识连接SQL数据库失败的排查方案

一、代码是否需要修改?

取决于你使用的数据访问组件:

  • Entity Framework Core(EF Core):3.1及以上版本无需额外修改,只要连接字符串配置正确,EF Core会自动借助托管标识获取访问令牌。如果是2.x及更早版本,需要手动实现令牌获取逻辑(建议直接升级到新版本)。
  • SqlClient直连:必须使用Microsoft.Data.SqlClient(而非旧版System.Data.SqlClient),且版本≥2.0.0。满足条件的话,无需修改代码,连接字符串的Authentication=Active Directory Default参数会自动触发托管标识认证。

二、容易遗漏的配置项

  • 数据库防火墙放行
    确保SQL Server的防火墙规则允许App Service的流量:要么添加App Service的所有出站IP到防火墙白名单,要么直接开启「允许Azure服务和资源访问此服务器」选项(在SQL Server的防火墙设置页)。

  • 数据库内部权限配置
    仅通过Azure Portal给App Service分配RBAC角色(如SQL DB Contributor)是不够的,必须在SQL数据库内创建托管标识对应的用户并分配数据库角色:

    -- 替换TestApp为你的App Service名称
    CREATE USER [TestApp] FROM EXTERNAL PROVIDER;
    -- 根据需求分配读写权限
    ALTER ROLE db_datareader ADD MEMBER [TestApp];
    ALTER ROLE db_datawriter ADD MEMBER [TestApp];
    

    执行上述SQL前,需要确保你是SQL Server的Azure AD管理员。

  • 连接字符串格式校验
    你的连接字符串中Authentication=Active Directory Default存在换行,需修正为无换行、无多余空格的格式:

    Server=<servername>.database.windows.net,1433;Database=<database>;Authentication=Active Directory Default
    
  • SQL Server的Azure AD管理员必须配置
    使用Azure AD身份验证连接SQL数据库的前提是,SQL Server已设置Azure AD管理员(用户或组均可)。该配置在SQL Server的「Azure Active Directory」选项卡中完成。

  • 托管标识状态验证
    确认App Service的系统托管标识已成功启用(在App Service的「标识」选项卡中查看状态为「开启」),且没有配置错误。

  • NuGet包版本检查
    确保项目引用的Microsoft.Data.SqlClient≥2.0.0,或EF Core≥3.1。旧版本不支持托管标识的自动认证逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 04:20:19