连接不同的Windows用户到SQL Server管理工具(2005或更高版本)

376
在 SQL Server Management Studio 2005(或更高版本)中是否有一种方法可以更改 Windows 身份验证用户(就像在 SQL Server 2000 及更早版本中一样)?
这是通用连接属性对话框(注意选择 Windows Auth 时灰色的 UID/PWD): dialog FYI - 一种解决方法是使用 runas,但我正在寻找一种解决方案,允许我跨多个服务器(以及多个域)使用多个 Windows 帐户。

2
据我所知,Run As... 是实现这一目标的唯一方法。为什么不能使用 Run As... 并为每个用户启动不同的管理工作室会话? - DCNYAM
4
只有在相同的域和/或森林中,RunAs 才能起作用。如果你是一名顾问,你永远不会在相同的域和/或森林中,因此拥有这个功能会很好。 - Eric
我能够理解你的感受,Eric。有时我会使用虚拟机与客户交互,以便虚拟机可以成为客户域/森林的一部分,并让我更无缝地工作。但如果你正在活跃地与多个域进行交互,在处理上可能有些繁琐。 - Ed Altorfer
6
多个域名是其中一个用例。另一个是以其自身服务帐户登录的Windows服务,开发人员希望验证SQL连接、权限等问题。听起来我没什么运气……但至少我们有runas。 - Matt P.
10个回答

461

虽然在单个SSMS实例中无法以不同用户身份连接到多个服务器,但您需要的是以下RUNAS语法:

runas /netonly /user:domain\username program.exe

当您使用/netonly开关时,即使没有建立信任关系,您也可以使用远程凭据登录到您当前不是成员的域。它只是告诉runas凭据将用于访问远程资源 - 应用程序与当前登录用户交互,与远程计算机作为您提供的凭据的用户交互。

您仍然需要运行多个SSMS实例,但至少您可以在每个实例中作为不同的Windows用户连接。


运行 `runas /netonly /user:domain\username ssms.exe` 的命令。

32
如果你想要相同的域名但不同的用户,请去掉/netonly开关。 - jimconstable
5
关于 netonly 开关的事情绝对是太棒了,有这个开关可以解决很多我需要的场景。谢谢。 - Jivko Petiov
9
目前来说,这是最方便的方法,给你点赞。微软不能将MSTSC / 远程桌面样式的登录对话框合并到SSMS中,并根据每个连接进行配置,这仍然有点糟糕。 - Paul Smith
9
哇!仅限于网络!太棒了。虽然有点有趣,但一旦运行后,当您尝试使用Windows认证连接到远程服务器时,它会显示您的本地用户,而不是netonly用户。当它连接时,这使得它看起来像魔术... - TTT
3
下面来自用户175017的回答对我很有用,看起来更加简单,并且允许在一个SSMS会话中进行特定于服务器的Windows连接。简而言之,在Win 7上运行“凭据管理器”,并只需添加<servername>:1433的Windows凭据,其中<servername>是SQL Server计算机的完全限定名称(例如MyServer.MyCompany.Com)。 - David Korn
显示剩余8条评论

186

按住shift键并右击 SQL Server Management Studio 图标。这样您可以以其他Windows账户用户身份运行。


36
很遗憾,当账户在另一个域/网络上时,这并不起作用——返回无效的用户名/密码。但是,以上命令可以在账户在其他网络上时正常工作。 - Jerad Rose
1
这对我有用!在我的情况下,我有两个属于同一域的帐户。 - Tathagata
适用于Windows 10。 - wrkwrk
在不同的域名上对我有效。 - Tahir Hassan
2
如何以其他Windows账户用户身份和管理员身份运行? - Kiquenet
这个在同一个域上对我起作用了,而runas则没有! - Michele

138

我发现的另一种方法是进入“开始” > “控制面板” > “存储的用户名和密码”(Windows 7 中的“管理工具” > “凭据管理器”),然后添加你想要在“runas”命令中使用的域账户。在 Windows 7 及更高版本中,请确保在“Windows 凭据”下添加。

然后,在 SQL Management Studio 2005 中,只需选择“Windows 身份验证”,并输入你想要连接的服务器(即使你可以看到灰色不可用的本地用户)...它会起作用!

不要问我为什么! :)

编辑: 在凭据管理器中的服务器名称后面加上“:1433”,否则可能无法连接,因为不信任该域。


12
说实话,这个答案应该被标记。对我来说,runas解决方案没有起作用,而且在控制台中启动smss时会出现头痛的问题,这就是当你调用smss时发生的情况。即使那种情况停止发生了,它仍然不起作用。但是凭据管理器>添加Windows凭据可行。输入服务器名称,以及您的DOMAIN\用户名和密码。就像他说的那样,它仍然会显示本地用户,但它仍然会连接。 - Brian Arsuaga
17
有时候你需要使用 sqlserver.domain.com:1433 作为网络地址。详情请见 https://dev59.com/cmw05IYBdhLWcg3w6GHH。 - Greg Bray
7
这对我确实有效,似乎更容易,并且允许在一个 SSMS 会话中进行特定于服务器的窗口连接。我只需运行“凭据管理器”,并添加 <servername>:1433 的 Windows 凭据,其中 <servername> 是 SQL Server 机器的完全限定名称(例如 MyServer.MyCompany.Com)。 - David Korn
1
“runas” 方法对我没用,但这个方法可以。一开始我在凭据管理器中没有加端口信息尝试登录,但仍然无法登录。当我在凭据管理器中添加了端口信息后,它就像魔法般地工作了。非常感谢您的帮助! - René
1
这可能是最优雅的解决方案。对我来说在Windows 8.1上运行,连接到一个SQL 2012独立实例,甚至不属于任何域。<servername>:1433 - Tim Lehner
显示剩余6条评论

22

这些答案都没有满足我的需求:在连接到远程服务器时,使用与我在本地计算机上登录的不同域账户(客户端跨VPN的域),而我不想进入他们的域!

相反,在“连接到服务器”对话框中,选择“Windows身份验证”,单击“选项”按钮,然后在“附加连接参数”选项卡中输入:

user id=domain\user;password=password

SSMS不会记住,但它会连接到该账户。


1
这在 SQL Server Management Studio 2017 中对我有效。 - natbob1
1
通常我使用runas /netonly命令,但我只是想尝试一下这个方法,它真的很棒!这是一个易于使用的解决方案,可以从已经打开的ssms实例连接到具有其他win凭据的另一个服务器!非常感谢这个提示,再也不必在ssms窗口之间切换了;) - Felix Bayer
对于Microsoft SQL Server SSMS来说,这绝对是最好的实用解决方案。它甚至允许您保存复杂密码(我们希望很难猜到)。遗憾的是,其他应用程序需要通过几乎令人讨厌的RUNAS进行管理。(试图模仿Linux的sudo的一部分,但效果不佳。) - alejandrob
3
如果当前运行 ssms.exe 的用户是本地用户,则此方法无效。在这种情况下,您需要使用 @SqlRyan 建议的 runas。 - Bemipefe

14

runas /netonly /user:domain\username program.exe 命令只在 Windows 10 上对我有效。

  • 将其保存为批处理文件
  • 以管理员身份运行

当作为普通用户运行命令批处理时,我遇到了一些用户在之前评论中提到的错误密码问题。


这对我也起作用了,域之间没有信任关系。我能够启动SSMS并使用其他域帐户连接到SQL服务器(即使在UI中它说它将使用本地域帐户)。 - Neil

13

对于Windows 10:

进入Sql Management Studio图标或菜单中的快捷方式:

右键单击 > 选择“打开文件位置”

展示图片

按住Shift并右键单击文件夹中的快捷方式或ssms.exe文件。按住Shift将会给你一个额外选项“以其他用户身份运行”:

展示图片

这将弹出一个登录框,您可以在其中输入要在会话下运行的凭据。


9
一点PowerShell魔法就可以解决问题:
cmdkey /add:"SERVER:1433" /user:"DOMAIN\USERNAME" /pass:"PASSWORD"

然后只需选择Windows身份验证。

1

有很多地方可能需要部署这种场景,但由于集成身份验证的工作方式,这是不可能的。

正如gbn所提到的,集成身份验证使用一个特殊的令牌来对应你的Windows身份。有一些编程实践称之为“模拟”(可能被Run As...命令使用),允许你有效地以另一个Windows用户的身份执行某项活动,但除此之外,在Windows应用程序中任意地像Linux那样以不同用户的身份进行操作并不是真正可行的。

如果你确实需要管理几个域中的多个服务器,可以考虑以下几点:

  1. 在你的域之间建立域信任,使你的帐户可以访问信任域中的计算机
  2. 在你需要管理的所有服务器上配置一个SQL用户(使用混合验证),以便你可以登录该用户;显然,这可能会引入一些安全问题,并且如果你必须在某个时候更改所有密码,可能会造成维护方面的麻烦。

希望这有所帮助!


不可能是错误的...上述的runas /netonly /user:domain\username program.exe命令可以很好地工作。 - Chris Pierce

0
有人尝试过不带参数的“普通”runas吗?对我来说,那些/netonly /savcecred听起来含糊不清,完全没有意义。
C:\Windows\System32\runas.exe /user:DOMAINX\OtherUser02 "C:\Program Files (x86)\Microsoft SQL Server Management Studio 18\Common7\IDE\ssms.exe"

这个完全没问题。无论如何,runas都会要求你输入用户密码。只需输入密码,即可符合安全审计要求。


出于安全原因(例如企业环境),您需要使用的 Windows 用户连接到 SQL Server 可能没有本地登录权限。这就是当您绝对需要使用“/netonly”参数的时候。 - Stefan Balan

-2
唯一实现你想要的方式就是通过右键单击快捷方式并使用“以其他用户身份运行”功能开启多个SSMS实例。

4
唯一的方式吗?并不是。 - Michel de Ruiter

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接