Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL Server“;用户“登录失败”;在.NET控制台应用程序的特定时间范围内出错_.net_Sql Server_Authentication - Fatal编程技术网

SQL Server“;用户“登录失败”;在.NET控制台应用程序的特定时间范围内出错

SQL Server“;用户“登录失败”;在.NET控制台应用程序的特定时间范围内出错,.net,sql-server,authentication,.net,Sql Server,Authentication,我们在Windows Server 2012R2机器上有一个计划任务,该机器从每天早上8点开始启动一个定制的.NET应用程序,每小时运行一次。应用程序通过实体框架与SQL Server 2012数据库服务器(不同的机器)通信,以获取一些数据并在本地执行不同的操作。此配置工作正常,没有发生任何事件 最近,我们更新了应用程序以对数据库进行额外调用,只是这次使用了ADO.NET和存储过程。这在大多数情况下都有效 我们注意到,在晚上9点和凌晨4点,我们收到“用户登录失败”异常-System.Data.S

我们在
Windows Server 2012R2
机器上有一个计划任务,该机器从每天早上8点开始启动一个定制的.NET应用程序,每小时运行一次。应用程序通过实体框架与
SQL Server 2012
数据库服务器(不同的机器)通信,以获取一些数据并在本地执行不同的操作。此配置工作正常,没有发生任何事件

最近,我们
更新了应用程序
以对数据库进行额外调用,只是这次使用了
ADO.NET
存储过程
。这在大多数情况下都有效

我们注意到,在晚上9点和凌晨4点,我们收到“用户登录失败”异常-
System.Data.SqlClient.SqlException(0x80131904)
。我在.NET应用程序完成的日志记录以及数据库服务器上的Windows事件日志中看到了这些

实体框架和ADO.NET调用都使用与SQL身份验证相同的连接字符串。我已经通过一些额外的日志来验证这一点。此外,使用连接字符串中的凭据通过SSMS手动连接到SQL Server也不会出错。我们还可以看到应用程序在一天中的大部分时间都在运行、连接和处理数据,没有任何错误(同样,通过日志进行验证)。基于所有这些,我得出结论,这实际上不是用户名/密码身份验证问题,而是SQL Server端在此期间发生的阻止登录的事情

我的第一个猜测是,数据库备份可能会以某种方式锁定数据库,或者将其置于单用户模式。查看数据库维护计划,我发现数据库在完全恢复模式下运行,每天上午12点执行一次完全备份,每小时执行一次差异备份,每15分钟执行一次T-log备份。这些错误总是在两次备份之间发生,因此我认为备份不是问题所在

我在数据库服务器上看到了一件有趣的事情。在“用户登录失败”错误事件的Windows事件日志中,如果我查看事件中的二进制数据,它会显示
HDB02.master
DB02
是数据库服务器名称。我不确定在这种情况下,对主数据库的“H”或引用是否表示存在问题或其他问题

最后,我看不到sql server或应用程序服务器上有任何额外的事件日志,可以提供更多的线索来解释为什么会发生这种情况。我已经搜索了我们的源代码管理,寻找可能导致这种情况的任何代码更改,但没有什么突出的地方

如果您对我可以研究的问题有任何其他建议,我将不胜感激

编辑:


到目前为止,这只发生在控制台应用程序中,但就在今天下午,当我们发布一个使用相同数据库但使用不同SQL用户的ASP.NET应用程序时,它被触发。这两个应用程序都是C#应用程序。

您在搜索MSDN时是否查找了该异常?该文章引用了另一个异常(SqlException(0x80131904):找不到句柄为1的准备语句)。Sql异常0x80131904似乎是多个不同异常发生的一般性错误。也请检查Sql Server日志,以查看是否为异常记录了其他状态。i、 e.SQL管理工作室>服务器>管理>SQL服务器日志。登录失败通常会向您提供原因、错误号、严重性和状态。请使用SQL Server Profiler捕获任何看似相关的事件。也许你可以看到,在连接失败期间,两种连接类型之间存在差异,或者发生了其他奇怪的事情。查看日志,它报告错误:18456,严重性:14,状态:8。状态8表示密码不匹配,我知道这是不正确的。