周五我不得不更改我的域密码,而我的雇主在周末将我的机器升级到了 Win11。我们的安全软件似乎也进行了升级。不确定这其中哪些部分可能相关。
我一直在使用 runas.exe(在任务栏上的快捷方式中)在 Win10 下运行 SQL Server Management Studio (SSMS),没有任何问题。然而,自升级以来,虽然 SSMS 将在备用 Windows 凭据下运行,但它已停止将凭据传递给我尝试连接的 SQL Server。当我尝试连接时,我几乎总是得到
Login failed for user 'NT AUTHORITY\ANONYMOUS LOGON'. (Microsoft SQL Server, Error: 18456)
有时我能够登录到不同域中的服务器,但这并不一致。我在 Azure Data Studio 中尝试执行完全相同的操作时没有遇到同样的问题。只是 SSMS。更奇怪的是,如果我按住 Shift 键并单击应用程序并选择“以不同用户身份运行”,则不会遇到任何问题。
我真的不知道从哪里开始。我已经重新启动了。我真的没有其他可以测试的域链接 SQL 登录。有人能提供任何关于问题出在哪里的建议吗?
答案1
因为你可以运行身份从上下文菜单中尝试重新创造SSMS 的快捷方式,右键单击并设置以管理员身份运行。
以用户身份运行其他比管理员快捷方式或批处理文件使用鲁纳斯命令。例如,
runas /user:"A E Neumann" "C:\Windows\notepad.exe"
为了避免每次都输入用户密码,请使用开关
/savecred
将其存储在 Windows 凭据管理器中,例如,runas /user:"A E Neumann" /savecred "C:\Windows\notepad.exe"
您也可以检查安全更新受影响的 GPO. 打开 gpedit.msc,导航到User Configuration\Administrative Templates\Start Menu and Taskbar
,并检查是否Show “Run as different user” command on Start
已启用。
答案2
我和同事想出的解决方法是创建一个 PowerShell 脚本来实现相同的结果。首先,由于Get-StoredCredential
没有看到此特定登录的条目,我创建了一个包含网络凭据的自定义条目。将其命名为您喜欢的任何名称。我们将在此示例中使用它foo
。然后创建一个脚本,如下所示:
$cred=Get-StoredCredential -Target "foo"
Start-Process "C:\Program Files (x86)\Microsoft SQL Server Management Studio 18\Common7\IDE\Ssms.exe" -Credential $cred
显然,将可执行文件路径替换为适合您的应用程序的路径。我必须对我使用的旧版 Visual Studio 执行同样的事情。我还必须使用 ps2exe 将脚本转换为可执行文件。您可能需要或不需要执行相同的操作。
这些都不能解决问题存在的原因,但它确实可靠地发挥作用。