Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/308.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
C# 以编程方式检查连接字符串用户名/密码?_C#_Sql Server_Linq To Sql - Fatal编程技术网

C# 以编程方式检查连接字符串用户名/密码?

C# 以编程方式检查连接字符串用户名/密码?,c#,sql-server,linq-to-sql,C#,Sql Server,Linq To Sql,我有一个客户提供的数据库,配置了多个用户。每个用户都有自己的用户名/密码等,这是SQL Server的数据库登录 在传统软件中,要求用户输入数据库和密码,然后使用密码在代码中形成连接字符串 我的任务是为此替换大量的数据库代码,我需要一种快速检查数据库用户名和密码的方法。目前,使用Linq,如果密码不正确,我最终会得到一个System.Data.SqlClient.SqlException,但实际抛出需要相当长的时间(我假设超时?) 有没有人知道一种很好的方法,可以快速测试我的用户名/密码组合与数

我有一个客户提供的数据库,配置了多个用户。每个用户都有自己的用户名/密码等,这是SQL Server的数据库登录

在传统软件中,要求用户输入数据库和密码,然后使用密码在代码中形成连接字符串

我的任务是为此替换大量的数据库代码,我需要一种快速检查数据库用户名和密码的方法。目前,使用Linq,如果密码不正确,我最终会得到一个
System.Data.SqlClient.SqlException
,但实际抛出需要相当长的时间(我假设超时?)


有没有人知道一种很好的方法,可以快速测试我的用户名/密码组合与数据库的对比?

您可以尝试通过ADO打开连接,并减少超时时间

 SqlConnection conn = new SqlConnection (yourconnectionstring + ";Connection Timeout=1;");          
 try
 { 
     conn.Open();
     conn.Close();
 }
 catch (SqlException ex)
 {
     if (ex.Number == 18456)
     {
          // invalid login
     }
 }
18456是SQL无效登录名


默认连接超时为15秒。

我认为您不希望数据库(或任何东西)能够告诉您传入的凭据不正确。为什么?因为这允许暴力检查。即使引入一个小的延迟也会大大阻碍这种尝试。

不妨看看这个问题:。但是,不确定如果密码不正确,它是否会返回更快的响应。如果DB服务器忙于许多连接,并且必须等待一段时间来处理此请求,该怎么办?在这种情况下,即使用户和密码正确,它也会说用户登录无效。然后它将失败。这就是为什么默认值是15秒。您可以将其放入不断增加的超时循环中,或者检查连接异常的确切响应。在我的情况下,DB服务器从来都不是很忙,所以老实说,这可能是一个很好的解决方法。我将在今天上午把它放到测试构建中,看看它是否能完成任务。