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

测试站点SQL登录失败求助:无法匹配指定登录名

环境信息
  • Microsoft .NET Framework 版本: 4.0.30319
  • ASP.NET 版本: 4.8.4494.0
问题描述

测试站点无法访问数据库,登录时抛出错误:System.Data.SqlClient.SqlException (0x80131904): Login failed for user
服务器事件查看器提示:

Reason: Could not find a login matching the name provided.

站点原本采用集成身份验证连接数据库,切换为显式账号连接后问题依旧。SQL Server服务、IIS服务均正常运行,同一服务器上其他站点可正常访问数据库。

已尝试操作:

  • 重启SQL Server和IIS服务
  • 检查并修改web.config中的连接字符串配置
  • 验证防火墙规则(确认数据库端口可正常访问)
  • 回滚系统小版本更新

补充信息:

  • 站点需使用数据库凭据登录,发布前后无重大配置变更
  • 本地通过IIS Express运行时,使用相同的集成身份验证连接字符串可正常访问数据库
  • 已参考同类问题解决方案,均无效,寻求下一步排查方向
完整错误堆栈
[SqlException (0x80131904): 登录用户 'WORKGROUP\x' 失败。]
   System.Data.ProviderBase.DbConnectionPool.TryGetConnection(DbConnection owningObject, UInt32 waitForMultipleObjectsTimeout, Boolean allowCreate, Boolean onlyOneCheckConnection, DbConnectionOptions userOptions, DbConnectionInternal& connection) +1341
   System.Data.ProviderBase.DbConnectionPool.TryGetConnection(DbConnection owningObject, TaskCompletionSource`1 retry, DbConnectionOptions userOptions, DbConnectionInternal& connection) +159
   System.Data.ProviderBase.DbConnectionFactory.TryGetConnection(DbConnection owningConnection, TaskCompletionSource`1 retry, DbConnectionOptions userOptions, DbConnectionInternal oldConnection, DbConnectionInternal& connection) +382
   System.Data.ProviderBase.DbConnectionInternal.TryOpenConnectionInternal(DbConnection outerConnection, DbConnectionFactory connectionFactory, TaskCompletionSource`1 retry, DbConnectionOptions userOptions) +307
   System.Data.SqlClient.SqlConnection.TryOpenInner(TaskCompletionSource`1 retry) +198
   System.Data.SqlClient.SqlConnection.TryOpen(TaskCompletionSource`1 retry) +422
   System.Data.SqlClient.SqlConnection.Open() +199
   System.Web.DataAccess.SqlConnectionHolder.Open(HttpContext context, Boolean revertImpersonate) +86
   System.Web.DataAccess.SqlConnectionHelper.GetConnection(String connectionString, Boolean revertImpersonation) +333
   System.Web.Security.SqlMembershipProvider.GetPasswordWithFormat(String username, Boolean updateLastLoginActivityDate, Int32& status, String& password, Int32& passwordFormat, String& passwordSalt, Int32& failedPasswordAttemptCount, Int32& failedPasswordAnswerAttemptCount, Boolean& isApproved, DateTime& lastLoginDate, DateTime& lastActivityDate) +1141
   System.Web.Security.SqlMembershipProvider.CheckPassword(String username, String password, Boolean updateLastLoginActivityDate, Boolean failIfNotApproved, String& salt, Int32& passwordFormat) +166
   System.Web.Security.SqlMembershipProvider.ValidateUser(String username, String password) +178
   x.Models.AccountMembershipService.ValidateUser(String userName, String password) in D:\x Repo\Dev\x\Models\Users\AccountModels.cs:212
   x.Controllers.AccountController.LogOn(LogOnModel model, String returnUrl) in D:\x Repo\Dev\x\Controllers\Users\AccountController.cs:225
   lambda_method(Closure , ControllerBase , Object[] ) +191
   System.Web.Mvc.ControllerActionInvoker.InvokeActionMethod(ControllerContext controllerContext, ActionDescriptor actionDescriptor, IDictionary`2 parameters) +35
   System.Web.Mvc.Async.<>c.<BeginInvokeSynchronousActionMethod>b__9_0(IAsyncResult asyncResult, ActionInvocation innerInvokeState) +39
   System.Web.Mvc.Async.WrappedAsyncResult`2.CallEndDelegate(IAsyncResult asyncResult) +77
   System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeActionMethod(IAsyncResult asyncResult) +42
   System.Web.Mvc.Async.<>c__DisplayClass11_0.<InvokeActionMethodFilterAsynchronouslyRecursive>b__0() +80
   System.Web.Mvc.Async.<>c__DisplayClass11_2.<InvokeActionMethodFilterAsynchronouslyRecursive>b__2() +396
   System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeActionMethodWithFilters(IAsyncResult asyncResult) +42
   System.Web.Mvc.Async.<>c__DisplayClass3_6.<BeginInvokeAction>b__4() +50
   System.Web.Mvc.Async.<>c__DisplayClass3_1.<BeginInvokeAction>b__1(IAsyncResult asyncResult) +188
   System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeAction(IAsyncResult asyncResult) +38
   System.Web.Mvc.<>c.<BeginExecuteCore>b__152_1(IAsyncResult asyncResult, ExecuteCoreState innerState) +29
   System.Web.Mvc.Async.WrappedAsyncVoid`1.CallEndDelegate(IAsyncResult asyncResult) +73
   System.Web.Mvc.Controller.EndExecuteCore(IAsyncResult asyncResult) +52
   System.Web.Mvc.Async.WrappedAsyncVoid`1.CallEndDelegate(IAsyncResult asyncResult) +39
   System.Web.Mvc.Controller.EndExecute(IAsyncResult asyncResult) +38
   System.Web.Mvc.<>c.<BeginProcessRequest>b__20_1(IAsyncResult asyncResult, ProcessRequestState innerState) +43
   System.Web.Mvc.Async.WrappedAsyncVoid`1.CallEndDelegate(IAsyncResult asyncResult) +73
   System.Web.Mvc.MvcHandler.EndProcessRequest(IAsyncResult asyncResult) +38
   System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +651
   System.Web.HttpApplication.ExecuteStepImpl(IExecutionStep step) +220
   System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +134
下一步排查方向
  • 验证IIS应用程序池身份:检查站点对应的IIS应用程序池运行身份,确认该账号在SQL Server中存在对应的登录名,且具有数据库访问权限。如果使用内置账号(如Network Service),需确保SQL Server中已创建NT AUTHORITY\NETWORK SERVICE的登录名并映射到目标数据库用户。
  • 确认连接字符串实际生效状态:在代码中添加日志输出当前使用的连接字符串(注意隐藏敏感信息),排查发布到服务器后,web.config的转换文件(如Web.Release.config)是否覆盖了默认配置,导致实际连接字符串与本地测试版本不一致。
  • 测试SQL Server登录名有效性:在服务器上使用sqlcmd工具模拟站点账号登录:
    • 集成身份验证:以应用程序池身份运行命令提示符,执行 sqlcmd -S <数据库实例名>,查看登录结果。
    • 显式账号:执行 sqlcmd -S <数据库实例名> -U <用户名> -P <密码>,验证账号权限。
  • 检查SQL Server登录名映射关系:登录SQL Server Management Studio,查看目标数据库用户列表,确认登录名已正确映射到数据库用户,且该用户拥有必要权限(如SELECT、EXECUTE等,匹配会员系统操作需求)。
  • 排查身份模拟配置:检查web.config中是否启用<identity impersonate="true"/>,若启用需确认模拟账号在SQL Server中存在对应登录名且权限充足。
  • 查看SQL Server详细错误日志:在SQL Server Management Studio中打开「管理」->「SQL Server日志」,找到对应登录失败记录,查看错误状态码(如18456状态码的细分值,状态5表示登录名不存在,状态11表示密码错误等),定位具体原因。

内容的提问来源于stack exchange,提问作者k0bra 3eak

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 22:15:32