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

本文介绍在 SQL Server Management Studio(SSMS)中通过 SQL Server 身份验证进行密码输入时出现的问题。

原始产品版本: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 引发的异常,以便于诊断。

参考