系统分配身份无法连接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环境已执行以下配置:
- 上传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"; - 为Test环境App Service启用系统分配身份
- 通过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]; - 确认Azure SQL Server的「防火墙和虚拟网络」设置中,「允许Azure服务和资源访问此服务器」已设为「是」
- 上传Web API至Azure App Service,使用的连接字符串:
报错信息
未处理的异常。Microsoft.Data.SqlClient.SqlException (0x80131904): 用户''登录失败。
后续排查更新
- 将Test环境的连接字符串改为指向Dev环境的
acme-db数据库时,连接完全正常(已提前在该数据库添加Test App Service为外部用户) - 删除原
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
相关产品推荐
相关产品推荐

