我们有一台运行 Windows Server 2012 R2 的计算机,它不属于任何域,并且该服务器上运行着一个 Web 应用程序。该应用程序的用户被设置为服务器的本地 Windows 用户。但用户永远不会自己登录服务器,应用程序只会要求他们输入用户名和密码,然后对照服务器检查密码是否正确。
应用程序被要求允许用户更改密码。我尝试使用 ADSI 接口方法ChangePassword(oldPassword, newPassword)
来执行此操作。或者,使用 ADSI 方法SetPassword(newPassword)
。但我收到一条错误消息“访问被拒绝”。
我认为,根据https://msdn.microsoft.com/en-us/library/ms180915(v=vs.90).aspx,我需要向执行通过 Web 访问的服务的用户的 ACL(AccessControlList)中添加包含以下扩展权限的 ACE(AccessControlEntries):
Reset Password
和Change Password
对于具有类似相同名称的方法。这些方法的描述这里我发现所有允许我查看这些内容的工具(“Active Directory 用户和计算机”、“ADSI Edit”或“dsacls”)在执行任何操作之前都需要连接到 Active Directory。
我发现的所有代码示例也都需要 Active Directory 才能获取需要更改 ACL 的用户或组对象。
我的实验表明,我可以让该帐户成为管理员组的成员,该组似乎具有 SetPassword 权限。但这可能远远超出了需要的范围,我只想向该帐户授予所需的权限。而且我仍然无法通过这种方式验证旧密码。
如果用户是本地用户而不是 AD 用户,那么有没有办法简单地将 ACE 添加到用户帐户?