让Win7使用新密码,无需重启或屏幕解锁

时间:2016-03-04 15:27:24

标签: windows security windows-authentication

我们调用DirectoryEntry.Invoke(" SetPassword",newpwd)来更改本地用户的密码,但在对远程SQL服务器执行Windows身份验证时,不会立即使用新密码。它确实在重启后使用,但这对我来说不是一个真正的选择。如何在不重启的情况下使其生效?我现在需要在客户端上运行进程才能立即开始使用新密码。

环境是两个Windows 7嵌入式系统,称之为服务器'和'客户端',并且没有域,但它们都在同一个工作组中。我们在两个系统上使用相同的用户名。有多个服务器有不同的密码(根据各种事情计算)。当我们需要切换到使用其他服务器时,我们会在本地更改密码。更改本身是成功的,但是从客户端到服务器的SQL访问失败并带有

SSPI handshake failed with error code 0x8009030c, state 14 while establishing a connection with integrated security; the connection has been closed. Reason: AcceptSecurityContext failed. The Windows error code indicates the cause of failure. 

Login failed. The login is from an untrusted domain and cannot be used with Windows authentication.

但是一旦客户端重新启动,它就可以成功访问服务器的数据库。

两个系统上的SQL Express 2008,配置为仅使用Windows身份验证。

Wireshark向我展示了SMB2 NTLMSSP_AUTH数据包,看起来像是常见的信息,虽然我不知道如何解码安全blob。否则,它匹配成功会话的数据包。在故障情况下,此数据包之后是带有STATUS_LOGON_FAILURE的SMB2响应和缺少的安全blob。我只能认为客户端在该安全blob中提供了某种密码哈希值,并且服务器发现它并不匹配自己的密码哈希 - 或类似的东西。

不幸的是,更改环境('使用Active Directory','使用Kerberos'等)对我来说不是一个选择。此外,这些是消费者触摸屏信息亭,没有人知道密码,也无法用键盘输入密码。

ADD:仅供参考,因此更改了密码:

DirectoryEntry directoryEntry = new DirectoryEntry(string.Format("WinNT://localhost/{0}", username));
directoryEntry.Invoke("SetPassword", newPassword);

ADD:将该参数设为新对象[] {newPassword},并调用.CommitChanges(),因为这些看似正确的事情要做。行为没有变化。

0 个答案:

没有答案