【发布时间】:2016-07-20 23:03:52
【问题描述】:
当使用 LogonUser() 和 LOGON32_LOGON_NETWORK 验证用户的 Windows 登录名和密码时,即使错误密码的检查次数超过用户的安全策略允许的次数,它似乎也不会导致其帐户被锁定。
有一个类似的问题:
Incorrect password passed to LogonUser() but the Active Directory account is not locked as expected
但在他们的案例中,他们使用的是LOGON32_LOGON_INTERACTIVE。
在我的情况下,域控制器可用于验证登录,但从documentation 中不清楚使用LOGON32_LOGON_NETWORK 是否意味着它不通过域控制器进行身份验证,只是它不会缓存凭据如果他们是正确的。
我正在寻找一个策略设置,如果 LogonUser() 使用错误密码的次数过多,它将锁定 Windows 域帐户。
编辑:帮助澄清情况的附加信息。
在我的 XE2 开发机器上使用正确的 domain\user 但不正确的 password 调用 LoginUser() 时,结果为 false。打电话给SysUtils.SysErrorMessage(System.GetLastError) 给我:
操作成功完成
在客户端站点的任何机器上执行的相同测试显示:
登录失败:未知用户名或密码错误
在他们的任何一台机器上继续测试最终会得到报告:
引用的帐户当前被锁定,可能无法登录
我想确定的是为什么该客户端的行为有所不同,因为我们希望我们域上的系统也锁定帐户。也许它是 Windows 帐户的属性?
【问题讨论】:
-
我认为您检查错误代码的方式一定有问题 - 如果调用失败,错误代码永远不应为零。 (我怀疑帐户没有被锁定的原因是登录尝试在检查密码之前失败。但没有实际的错误代码,这纯粹是猜测。)我可以确认使用@987654330 @ 登录类型不会阻止系统尝试对域控制器进行身份验证。如果域控制器不存在,我不确定它是否可以成功针对缓存的凭据。
-
(请注意,“LogonUser 不缓存此登录类型的凭据”这一行是在谈论不同类型的缓存凭据。)