在其他域中使用Windows身份验证连接到SQL Server


73

我正在尝试连接到另一个域中VPN上的远程SQL Server。当我在SQL Server上输入服务器名称并选择“其他连接参数”以添加学校需要的一些其他东西时:

Integrated Security=SSPI; User ID=DOMAIN\username; Password=Password

我收到以下错误:

登录失败。该登录名来自不受信任的域,不能与Windows身份验证一起使用。


Windows Credential Manager解决方案的唯一问题是,如果您拥有大量支持的数据库,则必须为每个数据库都有一个条目,并在每次必须更新域密码时进行更新。对于某些人来说,可能每30-60天。
smehaffie

这篇文章有些相关。
RBT

@smehaffie,您可以轻松地使用脚本和“ cmdkey / add”命令来维护您的密码-它也会更新。
马古先生

Answers:


70

您试图从应用程序的连接字符串中以纯文本形式传递Windows凭据。这根本不是Windows身份验证的工作原理,并且在很大程度上达不到目的。

您也不能只在自己的域中使用相同的密码创建相同的用户名,并期望它能神奇地工作。域名仍然是验证的一部分-您的计算机必须是该域的一部分,或者您的计算机所在的域必须由学校的域信任。

我知道的唯一解决方法是针对SSMS,这就是此答案中runas /netonly描述的技巧。这会使Windows愚蠢地以您指定的登录名而不是您自己的登录名启动SSMS(这不是您可以在SSMS的“连接属性”对话框中设置的,这是您需要从命令行或快捷方式启动SSMS的方式):

runas /netonly /user:domain\username "C:\path_to\ssms.exe"

这将提示您在远程域中输入密码。它会看起来就像是使用本地Windows凭据,但它不是

可能也可以与Visual Studio一起使用,但我真的不知道。

因此,您的选择是:

  • 让大学允许您将计算机加入域
  • 让大学将您的域名添加为受信任的域名
  • VPN内有一个跳转框,使您可以RDP并使用直接连接到SQL Server计算机的工具
  • 使用SQL身份验证
  • runas /netonly使用Visual Studio 尝试技巧
  • 只需对runas /netonlySSMS 使用技巧

runas确实与Visual Studio工作。
Daniel Hutmacher

没有命令提示符,有没有办法模仿这种行为?
吉尔斯·莱斯雷尔

1
@Gilles,您可以创建一个批处理文件,然后双击该批处理文件,或者可以使用该字符串并创建快捷方式
Aaron Bertrand

102

还有另一种方法,我现在优先使用该runas /netonly方法。

您可以使用Windows控制面板中的凭据管理器将凭据添加到Windows中的配置文件中。

  1. 开放证书管理器
  2. 单击“添加Windows凭据”
  3. 使用您要存储其凭据的SQL实例的名称和端口号填充“互联网或网络地址”字段。

    示例:UniServer:1433(1433是默认端口,您可能需要其他端口,尤其是在连接到命名实例时)

  4. 填充“用户名”(不要忘记包含域,例如MYDOMAIN\MYUSER
  5. 填写“密码”
  6. 点击确定

如果正确设置了服务器名称,端口和登录详细信息,则现在应该可以从大多数客户端工具,SSMS,Excel等使用Windows身份验证。他们都将使用存储的凭据。

提示:有时,添加凭据时需要为服务器使用FQN。例如UniServer.UniDomain.org:1433,这完全取决于您的网络。

这是该方法的快速演示:http: //youtu.be/WiVBPsqB9b4

这是我尝试(并失败)从桌面连接到在VM中运行的SQL Server的屏幕截图,然后添加所需的凭据并再次尝试-成功。

提示:使用“ cmdkey / add”命令对创建和更新存储的凭据进行脚本编写。


有趣!它似乎取决于客户端计算机认为远程计算机被调用的内容,而不是实际可能被调用的内容。我已经在主机文件中放置了一个IP地址的虚构条目(“ verysillytest.mwardm”)(因为我们这些人都无法从域外部访问),并以“ verysillytest.mwardm”名称设置了凭据: 1433“。然后,我可以使用主机名或IP地址(从一个名为Query Express的小应用程序)愉快地连接。
mwardm

@mwardm是的,这就是为什么我建议使用ping或nslookup的原因,因为它会告诉您名称的确切含义,包括大小写特定。
先生Magoo

嗯,“ ping -a”没有给我任何东西,而nslookup没有(立即)工作,因为我没有使用域的DNS服务器。不用担心,我实际上更喜欢只需要知道IP地址(和登录名)并能够自己命名的灵活性!
mwardm

1
太棒了,它有效!我只是想知道-是应该这样工作还是SQL Server方面的错误或设计失败?Microsoft或Microsoft的员工在任何地方宣传您必须拥有连接域的计算机,否则无法连接到设置为仅接受域凭据的SQL Server。
戴维·费伦茨·罗戈扬

顺便说一句,我想这个答案应该标记为已接受,因为这似乎是一个真正的解决方案,而另一个答案更像是一种解决方法。
戴维德·费伦茨·罗戈扬
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.