System.Data.SqlClient.SqlException:用户登录失败

时间:2014-03-14 20:39:24

标签: c# iis sql-server-2012 connection-string

在调试中使用我的项目我没有问题。但是在IIS中运行它我收到此错误:

System.Data.SqlClient.SqlException:用户'domain \ name-PC $'登录失败。

堆栈跟踪

[SqlException (0x80131904): Login failed for user 'CAPLUGSLLC\OETINGER-PC$'.]
   System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection, Action`1 wrapCloseInAction) +6749670
   System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj, Boolean callerHasConnectionLock, Boolean asyncClose) +815
   System.Data.SqlClient.TdsParser.TryRun(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj, Boolean& dataReady) +4515
   System.Data.SqlClient.TdsParser.Run(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj) +84
   System.Data.SqlClient.SqlInternalConnectionTds.CompleteLogin(Boolean enlistOK) +53
   System.Data.SqlClient.SqlInternalConnectionTds.AttemptOneLogin(ServerInfo serverInfo, String newPassword, SecureString newSecurePassword, Boolean ignoreSniOpenTimeout, TimeoutTimer timeout, Boolean withFailover) +368
   System.Data.SqlClient.SqlInternalConnectionTds.LoginNoFailover(ServerInfo serverInfo, String newPassword, SecureString newSecurePassword, Boolean redirectedUserInstance, SqlConnectionString connectionOptions, SqlCredential credential, TimeoutTimer timeout) +6777754
   System.Data.SqlClient.SqlInternalConnectionTds.OpenLoginEnlist(TimeoutTimer timeout, SqlConnectionString connectionOptions, SqlCredential credential, String newPassword, SecureString newSecurePassword, Boolean redirectedUserInstance) +6778255
   System.Data.SqlClient.SqlInternalConnectionTds..ctor(DbConnectionPoolIdentity identity, SqlConnectionString connectionOptions, SqlCredential credential, Object providerInfo, String newPassword, SecureString newSecurePassword, Boolean redirectedUserInstance, SqlConnectionString userConnectionOptions, SessionData reconnectSessionData) +878
   System.Data.SqlClient.SqlConnectionFactory.CreateConnection(DbConnectionOptions options, DbConnectionPoolKey poolKey, Object poolGroupProviderInfo, DbConnectionPool pool, DbConnection owningConnection, DbConnectionOptions userOptions) +1162
   System.Data.ProviderBase.DbConnectionFactory.CreatePooledConnection(DbConnectionPool pool, DbConnection owningObject, DbConnectionOptions options, DbConnectionPoolKey poolKey, DbConnectionOptions userOptions) +72
   System.Data.ProviderBase.DbConnectionPool.CreateObject(DbConnection owningObject, DbConnectionOptions userOptions, DbConnectionInternal oldConnection) +6781425
   System.Data.ProviderBase.DbConnectionPool.UserCreateRequest(DbConnection owningObject, DbConnectionOptions userOptions, DbConnectionInternal oldConnection) +103
   System.Data.ProviderBase.DbConnectionPool.TryGetConnection(DbConnection owningObject, UInt32 waitForMultipleObjectsTimeout, Boolean allowCreate, Boolean onlyOneCheckConnection, DbConnectionOptions userOptions, DbConnectionInternal& connection) +2105
   System.Data.ProviderBase.DbConnectionPool.TryGetConnection(DbConnection owningObject, TaskCompletionSource`1 retry, DbConnectionOptions userOptions, DbConnectionInternal& connection) +116
   System.Data.ProviderBase.DbConnectionFactory.TryGetConnection(DbConnection owningConnection, TaskCompletionSource`1 retry, DbConnectionOptions userOptions, DbConnectionInternal oldConnection, DbConnectionInternal& connection) +1089
   System.Data.ProviderBase.DbConnectionInternal.TryOpenConnectionInternal(DbConnection outerConnection, DbConnectionFactory connectionFactory, TaskCompletionSource`1 retry, DbConnectionOptions userOptions) +6785863
   System.Data.SqlClient.SqlConnection.TryOpenInner(TaskCompletionSource`1 retry) +233
   System.Data.SqlClient.SqlConnection.TryOpen(TaskCompletionSource`1 retry) +278
   System.Data.SqlClient.SqlConnection.Open() +239
   System.Data.Linq.SqlClient.SqlConnectionManager.UseConnection(IConnectionUser user) +65
   System.Data.Linq.SqlClient.SqlProvider.get_IsSqlCe() +38
   System.Data.Linq.SqlClient.SqlProvider.InitializeProviderMode() +30
   System.Data.Linq.SqlClient.SqlProvider.System.Data.Linq.Provider.IProvider.Execute(Expression query) +81
   System.Data.Linq.DataQuery`1.System.Collections.Generic.IEnumerable<T>.GetEnumerator() +54
   System.Collections.Generic.List`1..ctor(IEnumerable`1 collection) +446
   System.Linq.Enumerable.ToList(IEnumerable`1 source) +80
   MvcMobile.Controllers.HomeController.Index() +38
   lambda_method(Closure , ControllerBase , Object[] ) +79
   System.Web.Mvc.ReflectedActionDescriptor.Execute(ControllerContext controllerContext, IDictionary`2 parameters) +261
   System.Web.Mvc.ControllerActionInvoker.InvokeActionMethod(ControllerContext controllerContext, ActionDescriptor actionDescriptor, IDictionary`2 parameters) +39
   System.Web.Mvc.Async.<>c__DisplayClass42.<BeginInvokeSynchronousActionMethod>b__41() +34
   System.Web.Mvc.Async.<>c__DisplayClass39.<BeginInvokeActionMethodWithFilters>b__33() +124
   System.Web.Mvc.Async.<>c__DisplayClass4f.<InvokeActionMethodFilterAsynchronously>b__49() +839035
   System.Web.Mvc.Async.<>c__DisplayClass37.<BeginInvokeActionMethodWithFilters>b__36(IAsyncResult asyncResult) +15
   System.Web.Mvc.Async.<>c__DisplayClass2a.<BeginInvokeAction>b__20() +33
   System.Web.Mvc.Async.<>c__DisplayClass25.<BeginInvokeAction>b__22(IAsyncResult asyncResult) +839620
   System.Web.Mvc.<>c__DisplayClass1d.<BeginExecuteCore>b__18(IAsyncResult asyncResult) +28
   System.Web.Mvc.Async.<>c__DisplayClass4.<MakeVoidDelegate>b__3(IAsyncResult ar) +15
   System.Web.Mvc.Controller.EndExecuteCore(IAsyncResult asyncResult) +65
   System.Web.Mvc.Async.<>c__DisplayClass4.<MakeVoidDelegate>b__3(IAsyncResult ar) +15
   System.Web.Mvc.Controller.EndExecute(IAsyncResult asyncResult) +51
   System.Web.Mvc.<>c__DisplayClass8.<BeginProcessRequest>b__3(IAsyncResult asyncResult) +42
   System.Web.Mvc.Async.<>c__DisplayClass4.<MakeVoidDelegate>b__3(IAsyncResult ar) +15
   System.Web.Mvc.MvcHandler.EndProcessRequest(IAsyncResult asyncResult) +51
   System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +606
   System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +288

我可以通过Google找到的头号解决方案是更改无效的应用程序池高级身份设置。

我正在使用IIS 7.5,我正在连接到SQLServer 2012,我的连接字符串在下面。

连接字符串

<add name="Caplugs_Nav_DataConnectionString" connectionString="Data Source=01DEV\SQLDEV01;Initial Catalog=Caplugs_Nav_Data;Integrated Security=True;MultipleActiveResultSets=True;Application Name=EntityFramework"
  providerName="System.Data.SqlClient" />

12 个答案:

答案 0 :(得分:20)

只需设置Integrated Security=False即可,根据TrueFalse之间的comment差异,它会有效:

  

True会忽略User IDPassword(如果提供)并使用正在运行的进程SSPI(Security Support Provider Interface )它将使用它们,如果提供这就是MS更喜欢这个的原因。   它们是等效的,因为它们使用相同的安全机制进行身份验证,但就是这样。

答案 1 :(得分:16)

假设您打算使用Windows身份验证来模拟服务帐户,则必须在IIS和ASP.NET中设置Windows身份验证。

在IIS中,确保添加并启用了Windows身份验证模块。还要确保您的应用程序池在域帐户下运行,而不是在本地帐户下运行。

在ASP.NET中,确保将身份验证模式属性设置为&#34; Windows&#34;

<system.web>
    <authentication mode="Windows"/>
 </system.web>

答案 2 :(得分:3)

如果您的SQL Server尚未配置为使用混合模式身份验证,您也可能会收到此错误 - 它实际上并未告诉您未启用此功能!

答案 3 :(得分:3)

我也有类似的经历,花了我一些时间解决问题。不过,我自己的情况是ASP.Net MVC CoreCore框架。设置Trusted_Connection=False;解决了我的问题。

内部appsettings.json文件

"ConnectionStrings": {
    "DefaultConnection": "Server=servername; Database=databasename; User Id=userid; Password=password; Trusted_Connection=False; MultipleActiveResultSets=true",
  },

答案 4 :(得分:2)

添加持久性安全信息=真;在连接字符串中。

答案 5 :(得分:1)

我只是遇到了这个错误,花了几天的时间才解决。最初问题中提到的红色鲱鱼错误消息使我们陷入混乱,加上Windows Event Viewer错误日志显示了类似的内容:

Login failed for user '(domain\name-PC)$'. Reason: Could not find a login matching the name provided. [CLIENT: <local machine>]

以上都不是,用户具有SQL Server中所有必要的权限。

在我们的案例中,解决方案是将IIS中的应用程序池标识切换为NetworkService

答案 6 :(得分:1)

我尝试了一些建议的答案,但未能解决问题。最终,我发现默认的连接超时(不是命令超时)为15秒,一旦将其增加到60,几乎再也不会发生。 只需将其添加到您的连接字符串中: ;Connection Timeout=60 我选择60秒,但您可以输入任何您认为最适合自己需要的值。

答案 7 :(得分:0)

这里的Numpty使用了SQL身份验证

enter image description here

而不是Windows(正确)

enter image description here

将登录添加到SQL Server时,如果您使用的是Windows身份验证,也会出现此错误。

答案 8 :(得分:0)

我遇到了同样的情况。创建连接字符串,如下所示。

替换

"connectionString": "Data Source=server name;Initial Catalog=DB name;User id=user id;Password=password;Integrated Security=True;MultipleActiveResultSets=True"

作者

"connectionString": "Server=server name; Database=Treat; User Id=user id; Password=password; Trusted_Connection=False; MultipleActiveResultSets=true"

答案 9 :(得分:0)

有点笨,但是我的密码中有一个奇怪的字符(é)。省略它之后,我不再出现错误。

答案 10 :(得分:0)

从对象资源管理器检查 SQL Sever 的属性。

如果 Integrated Security 设置为 true,也请对连接字符串进行相同的更改。

check the screenshot of the property grid

它适用于 ASP.NET Core Web Api...

答案 11 :(得分:0)

将用户配置文件从 Windows 域迁移到 Azure Active Directory (AzureAD) 后,我遇到了这个问题,可能是因为我的用户名已更改,但我的配置文件目录没有。我通过删除 %APPDATALOCAL%\Microsoft\Microsoft SQL Server Local DB\Instances\MSSQLLocalDB 解决了这个问题。