SSMS 中键入的密码出现“密码无效”错误和响应速度缓慢

本文介绍使用SQL Server身份验证SQL Server Management Studio (SSMS) 的密码输入时出现的问题。

原始产品版本:SQL Server
原始 KB 编号: 4038457

症状

假设使用 SSMS 17.2 (或较旧版本的程序) 使用 SQL Server 身份验证连接到任何版本的 SQL Server。 键入密码时,密码框对键盘按键的视觉响应明显变慢。 此外,登录尝试失败,并显示“密码无效”错误消息,即使输入的密码正确。

原因

出现此问题的原因是 Windows 数据保护 API 无法将 MasterKey 备份到域的域控制器,该域控制器包含用于启动 SSMS 的 Windows 帐户。

解决方法

若要解决此问题,请执行以下操作:

解决方案

若要解决此问题,请确定并解决阻止备份 Windows 数据保护 API MasterKey 的问题。

更多信息

以下步骤描述了此方案中发生的情况:

  1. 在 SSMS 的密码框中键入字符时,将调用 CryptProtectData Windows 数据保护 API (DPAPI) 函数来加密密码。

  2. DPAPI 最初生成名为 MasterKey 的强密钥 (因为没有有效的 MasterKey 用于) ,该密钥受用户的登录凭据保护,并且会调用备份过程。

  3. 如果此过程 (失败,因为用户域) 没有可访问的可写域控制器 (DC) ,则会生成错误并引发 SSMS 应用程序。

  4. 在 SSMS 代码中,此错误被捕获且未处理。 由于代码不处理这种情况,因此不会向用户显示此错误。

  5. 这会导致发送到SQL Server的密码为空字符串。 遇到此问题时,有两种症状:

    • 由于尝试访问可写域控制器失败,在密码框中键入操作明显缓慢。

    • 即使输入了正确的密码,SQL Server在其错误日志中报告无效的密码。

从本质上讲,在 RWDC 不可用时,你遇到了 DPAPI MasterKey 备份失败一文中所述的问题。 Microsoft 已更改 17.3 和未来版本的 SSMS 代码。 因此,如果遇到此问题,系统将报告从 DPAPI 引发的异常,以便更轻松地进行诊断。

References