gal*_*ets 22 sql-server authentication windows-authentication
我一直认为,为了使用具有显式指定凭据的Windows身份验证连接到SQL服务器,您必须使用LogonUser,Impersonate,然后连接.
在我看来,这个链接表明,只需在连接字符串中指定"uid = ...; pwd = ..."就可以连接到SQL服务器而不需要这么麻烦.我测试了这种方法只是为了确保它不起作用,而且 - 看哪 - 它没有.如果那个博客文章不在msdn.com上,我会把它当作noob talk解雇,但确实如此.
有谁知道我错过了什么?
编辑1:许多受访者误解了我的意思.这是我所说的复制/粘贴.它不是集成的SQL,也不是由IIS制作的ASP.NET模拟:
string sql4 = String.Format(
@"Data Source={0};Integrated Security=SSPI;uid=<uid>;pwd=<pid>", server);
// Database + Windows Authentication + Username/Password
Run Code Online (Sandbox Code Playgroud)
Joh*_*ers 30
SQL Server有两种不同的安全性."Windows身份验证"和"SQL Server身份验证".当你看到uid和pwd时,你会看到后者.在这种情况下,uid不是Windows主体 - 操作系统对此一无所知.
所以你问题的答案是,不,你不能在连接字符串中传递Windows用户名和密码来登录SQL Server.
这取决于 - 如果您从命令行或 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=.... 部分将被忽略。
马克