Azure App Service中.NET Core Web应用启动时'myid'用户登录失败
已通过流水线在Azure部署了App Service、SQL Server及两个数据库(HangfireDB、MyAppDB),并将压缩后的应用部署至App Service。但在本地开发工具控制台执行dotnet mywebapp.dll时,抛出异常:
Unhandled exception. Microsoft.Data.SqlClient.SqlException (0x80131904): Login failed for user 'myid'.
相关配置信息
Startup.cs 连接字符串配置
services.AddDbContext<MyDBContext>(options => { options.UseSqlServer(Configuration.GetConnectionString("MyDBContext")); options.ConfigureWarnings(warnings => warnings.Ignore(CoreEventId.NavigationBaseIncludeIgnored)); }); services.AddHangfire(options => { options.UseSqlServerStorage(() => new Microsoft.Data.SqlClient.SqlConnection(Configuration.GetConnectionString("MyHangfireContext")), hangfireConfig); });
(hangfireConfig为独立定义的SqlServerStorageOptions类型变量)
appsettings 连接字符串
"MyHangfireContext": "Server=tcp:mydb.database.windows.net,1433;Initial Catalog=HangfireDB;Persist Security Info=False;User ID=myid;Password=mypassword;MultipleActiveResultSets=False;Encrypt=True;TrustServerCertificate=False;Connection Timeout=30;", "MyDBContext": "Server=tcp:mydb.database.windows.net,1433;Initial Catalog=MyAppDB;Persist Security Info=False;User ID=myid;Password=mypassword;MultipleActiveResultSets=False;Encrypt=True;TrustServerCertificate=False;Connection Timeout=30;"
已设置ASPNETCORE_ENVIRONMENT环境变量确保加载对应环境配置。
检查本地IP是否在Azure SQL防火墙允许列表
Azure SQL Server默认仅允许Azure服务和指定IP访问。登录Azure门户,找到目标SQL Server,进入「防火墙和虚拟网络」页面,添加当前开发机器的IP地址,保存后重试运行应用。验证SQL账号权限
确认myid账号拥有两个数据库的登录及用户权限:- 进入Azure门户对应SQL数据库的「查询编辑器」
- 执行以下SQL命令检查:
-- 检查服务器级登录是否存在 SELECT name FROM sys.server_principals WHERE name = 'myid'; -- 检查HangfireDB数据库用户 USE HangfireDB; SELECT name FROM sys.database_principals WHERE name = 'myid'; -- 检查MyAppDB数据库用户 USE MyAppDB; SELECT name FROM sys.database_principals WHERE name = 'myid';
若不存在,需创建服务器登录并映射到数据库用户,赋予必要操作权限(如
db_owner或具体业务权限)。核对连接字符串的账号密码
确认appsettings中Password=mypassword与Azure SQL Server设置的登录密码完全一致,注意大小写、特殊字符的正确性。若密码包含特殊字符,需确保在JSON中已正确转义(例如\需写成\\)。确认环境配置是否正确加载
在Startup.cs中添加临时日志输出,验证实际加载的连接字符串:var myDbConn = Configuration.GetConnectionString("MyDBContext"); var hangfireConn = Configuration.GetConnectionString("MyHangfireContext"); Console.WriteLine($"MyDBContext连接字符串: {myDbConn}"); Console.WriteLine($"MyHangfireContext连接字符串: {hangfireConn}");运行应用后查看控制台输出,确认服务器地址、账号、数据库名称无误。
直接测试SQL Server连接性
使用SQL Server Management Studio(SSMS)或Azure Data Studio,尝试用myid账号连接tcp:mydb.database.windows.net,1433。若连接失败,优先解决账号或防火墙问题。
内容的提问来源于stack exchange,提问作者Lucky

