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 身份验证而不是 SQL 身份验证。
- 使用本地帐户而不是域帐户登录到 Windows。
- 在 RWDC 不可用时,请遵循 DPAPI MasterKey 备份失败的“解决方案”部分中的步骤。
解决方法
若要解决此问题,请确定并解决阻止备份 Windows 数据保护 API MasterKey 的问题。
详细信息
以下步骤描述了此方案中发生的情况:
在 SSMS 的密码框中键入字符时, 将调用 CryptProtectData Windows 数据保护 API (DPAPI) 函数来加密密码。
DPAPI 最初生成名为 MasterKey 的强密钥(因为没有有效的 MasterKey 可供使用),该密钥受用户的登录凭据保护,并调用备份过程。
如果此过程失败(因为用户域没有可访问的可写域控制器(DC),则会生成错误并将其引发到 SSMS 应用程序。
在 SSMS 代码中,捕获此错误且未处理。 由于代码未处理这种情况,因此不会向用户显示此错误。
这会导致发送到 SQL Server 的密码为空字符串。 遇到此问题时,有两种症状:
由于尝试到达可写域控制器失败,在密码框中键入操作明显缓慢。
即使输入了正确的密码,SQL Server 也会在其错误日志中报告无效的密码。
实质上,在 RWDC 不可用时,你遇到了 DPAPI MasterKey 备份失败一文中记录的问题。 Microsoft更改了 17.3 和将来版本的 SSMS 代码。 因此,如果遇到此问题,系统将报告从 DPAPI 引发的异常,以便于诊断。