测试站点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
相关产品推荐
相关产品推荐

