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

系统分配身份无法连接Azure SQL Server数据库的问题求助

问题:Test环境App Service使用Entra ID连接Azure SQL失败,提示用户''登录失败

环境与已完成配置

  • 运行基于.NET的App Service,通过Entity Framework连接仅允许Microsoft Entra身份验证的Azure SQL Server
  • Dev环境(App Service:acme-myapp-api-d)采用完全相同的配置,可正常连接同一SQL实例下的acme-db数据库
  • Test环境已执行以下配置:
    1. 上传Web API至Azure App Service,使用的连接字符串:
      Server=tcp:acme-dev-db.database.windows.net,1433;Initial Catalog=acme-db-test;Encrypt=True;TrustServerCertificate=False;Connection Timeout=30;Authentication="Active Directory Default";
      
    2. 为Test环境App Service启用系统分配身份
    3. 通过SSMS在acme-db-test数据库中执行授权SQL:
      CREATE USER [acme-myapp-api-t] FROM EXTERNAL PROVIDER;
      ALTER ROLE db_datareader ADD MEMBER [acme-myapp-api-t];
      ALTER ROLE db_datawriter ADD MEMBER [acme-myapp-api-t];
      ALTER ROLE db_ddladmin ADD MEMBER [acme-myapp-api-t];
      
    4. 确认Azure SQL Server的「防火墙和虚拟网络」设置中,「允许Azure服务和资源访问此服务器」已设为「是」

报错信息

未处理的异常。Microsoft.Data.SqlClient.SqlException (0x80131904): 用户''登录失败。

后续排查更新

  1. 将Test环境的连接字符串改为指向Dev环境的acme-db数据库时,连接完全正常(已提前在该数据库添加Test App Service为外部用户)
  2. 删除原acme-db-test开发数据库,重新创建为无服务器生产数据库,再次执行添加外部用户的SQL后,连接成功

根因分析与解决方案总结

1. 数据库外部用户同步异常

新创建的数据库可能存在Entra ID身份同步延迟,或首次执行CREATE USER时因隐性错误导致用户未正确映射。重新创建数据库后,同步机制重新触发,修复了用户映射问题。

2. 数据库类型的Entra身份验证兼容性

开发级别的Azure SQL数据库(如非无服务器的Basic/Standard层)可能在Entra ID用户映射逻辑上存在限制,切换为无服务器生产库后,身份验证流程的兼容性得到修复。

快速验证步骤(复现时使用)

  • 执行SELECT * FROM sys.database_principals WHERE name = '你的App Service名称',确认外部用户已存在且类型为E(External User)
  • 核对App Service系统分配身份的名称与数据库中创建的用户名完全一致(Azure资源名称区分大小写)
  • 确认SQL Server与App Service属于同一Microsoft Entra租户,避免跨租户身份验证失败

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 11:44:58