使用不同域中的 Windows 身份验证连接到 SQL Server

ste*_*osz 96 authentication sql-server logins

我正在尝试连接到不同域中 VPN 上的远程 SQL Server。当我在 SQL Server 上输入服务器名称并选择其他连接参数以添加我学校需要的一些额外内容时:

Integrated Security=SSPI; User ID=DOMAIN\username; Password=Password
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

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

Mis*_*goo 134

还有另一种方法,我现在优先使用该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”命令编写脚本来创建和更新存储的凭据。

  • 太棒了,它有效!我只是想知道 - 它应该像那样工作还是 SQL Server 方面的错误或设计失败?Microsoft 或 Microsoft 人员到处宣传您必须拥有连接域的计算机,否则无法连接到设置为仅接受域凭据的 SQL Server。 (2认同)
  • 只是需要注意的小事。您不要将实例名称放在凭据管理器中。最初我尝试将其添加为 server\SQL2019,[port]。这没有用。它只需要 [servername]:[port] (2认同)

Aar*_*and 93

您正在尝试从应用程序的连接字符串以纯文本形式传递 Windows 凭据。这根本不是 Windows 身份验证的工作方式,并且在很大程度上违背了目的。

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

我所知道的唯一解决方法是针对 SSMS(它也适用于其他应用程序,例如Plan Explorer 和 SentryOne),这就是本答案中runas /netonly描述的技巧。这会欺骗 Windows 作为您指定的登录名而不是您自己的登录名启动 SSMS(这不是您可以在 SSMS 的连接属性对话框中设置的内容,这是您需要从命令行或快捷方式启动 SSMS 的方式):

runas /netonly /user:domain\username "C:\path_to\ssms.exe"
Run Code Online (Sandbox Code Playgroud)

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

这应该适用于任何应用程序,包括 Visual Studio。

所以你的选择是:

  • 让大学允许您将您的机器加入域
  • 让大学将您的域添加为受信任域
  • 在 VPN 内有一个跳转框,允许您 RDP 并使用直接连接到 SQL Server 机器的工具
  • 使用 SQL 身份验证
  • runas /netonly技巧与 SSMS 或 Visual Studio 结合使用