我一直认为,为了使用带有明确指定凭据的Windows身份验证连接到SQL服务器,您必须使用LogonUser,Impersonate,然后连接。
在我看来,this link表明只需在连接字符串中指定“uid = ...; pwd = ...”就可以连接到SQL服务器而不需要这么麻烦。我测试了这种方法只是为了确保它不起作用,而且 - 看哪 - 它没有。如果那篇博客文章不在msdn.com上,我会把它当作noob talk解雇,但确实如此。
有没有人知道我错过了什么?
EDIT1:许多受访者误解了我的意思。这是我所说的复制/粘贴。它不是 集成SQL,也不是IIS模拟的ASP.NET:
string sql4 = String.Format(
@"Data Source={0};Integrated Security=SSPI;uid=<uid>;pwd=<pid>", server);
// Database + Windows Authentication + Username/Password
答案 0 :(得分:28)
SQL Server有两种不同的安全性。 “Windows身份验证”和“SQL Server身份验证”。当你看到uid和pwd时,你会看到后者。在这种情况下,uid不是Windows主体 - 操作系统对此一无所知。
因此,您的问题的答案是否,您无法在连接字符串中传递Windows用户名和密码以登录SQL Server。
答案 1 :(得分:4)
这取决于 - 如果您从命令行或Winforms应用程序直接连接到您的SQL Server,您可以指定“Integrated Security = SSPI;”然后使用您的Windows凭据作为登录凭据,或者您指定“user id = ....; pwd = .....” - 但那是SQL登录 - 而不是您的Windows登录。
你提到“模仿,然后连接” - 这似乎表明ASP.NET - 这是一个完全不同的故事。如果您冒充,那么您基本上使用的是Windows凭据,例如: Web服务器将“模拟”您并以您身份登录(使用Windows凭据)。在这种情况下,再次,不需要指定“uid = ....; pwd = .....”(如果是,它将被忽略)。
正如您提到的链接清楚地显示 - 如果您可以直接连接,并且您指定“Integrated Security = SSPI;”,那么这优先于任何uid = ...; pwd = ....您也可以指定并使用您的Windows凭据登录;那些额外的uid = ...; pwd = ....作品被忽略了。
马克
答案 2 :(得分:2)
有问题的文章和要点涉及SQL安全性,而不是集成安全性。如果启用了SQL身份验证(混合模式),则可以传递SQL用户的凭据并以此方式登录。如果SQL服务器设置为仅使用集成安全性,那么这将不起作用。允许使用Windows登录凭据登录也不行。
答案 3 :(得分:1)
在我们的商店中,我们经常使用您描述的连接字符串。没问题。但是你的sql server数据库必须设置为使用sql security,而不是windows authentication。
我们的应用程序中的示例连接字符串(来自web.config)如下所示:
<connectionStrings>
<add name="ConfigurationData" connectionString="server=DevServer;
database=travel_expense_management_dv;uid=userid;pwd=password!;"
providerName="System.Data.SqlClient" />
</connectionStrings>
另一方面,我们商店的DBA大师在主服务器上设置了一个个人数据库,该数据库已经与我的Windows登录集成了安全性。我不需要uid和pwd,因为它从上下文中获取了我的身份验证信息。
答案 4 :(得分:1)
是的,正如你所说,文章提到了这一点:
string sql4 = String.Format(@"Data Source={0};Integrated Security=SSPI;uid=<uid>;pwd=<pid>", server); // Database + Windows Authentication + Username/Password
但如果你以后仔细阅读了几行,就会说:
string sql4 - &gt;使用Windows登录登录,即。优先于用户名/密码。
:)
答案 5 :(得分:1)
这已经很老了,但也许有人有同样的问题。
你可以使用 WindowsAuthentication 和在连接字符串上指定用户ID和密码进行连接,但不能在每台设备上进行连接。您可以通过例如在WinCE 设备(https://technet.microsoft.com/en-us/library/aa275613(v=sql.80).aspx)上实现此目的。
我不知道你是否可以使用连接字符串在其他操作系统上执行相同的操作(不进行模拟操作)。
希望它有所帮助。
答案 6 :(得分:0)
对于仍然遇到这样的问题的人来说也是一个贡献。根据我的经验,如果您没有在连接中指定任何用户/密码,它将使用Windows身份验证自动连接到数据库。这意味着它将获取用户ID和登录到计算机的用户的凭据。如果系统识别出您的用户ID在数据库中存在/创建,则系统将允许您连接到数据库。但是,一旦在连接中指定了用户标识和密码,它就会绕过Windows身份验证并使用sql server身份验证。