更改本地 Windows 用户的密码

问题描述 投票:0回答:2

通常可以在 Windows 中更改自己的密码,无需管理员权限.

我正在编写一个工具来管理多个服务器/客户端上的用户和组。我还想授予客户编辑自己密码的权利。客户当然没有管理员权限。要更改用户密码具有管理员权限我使用 DirectoryEntry 是这样的:

try
{
    DirectoryEntry localDirectory = 
        new DirectoryEntry("WinNT://" + Environment.MachineName.ToString());
    DirectoryEntries users = localDirectory.Children;
    DirectoryEntry user = users.Find(username);
    user.Invoke("SetPassword", newPassword);

    Console.WriteLine("Success!");
    Console.ReadLine();
}
catch (Exception ex)
{
    Console.WriteLine(ex.Message);
    Console.ReadLine();
}

这里的问题是,如果没有管理员权限,目录服务将不可用。因此,我希望有一个无需管理员权限即可工作的解决方法(仅在更改 your own 密码时才需要)。

c# directoryservices user-management
2个回答
7
投票

SetPassword
需要管理员权限才能执行 - 这可能不是您想要做的事情。
ChangePassword
不可以由最终用户自己使用。它以旧密码和新密码作为参数。 这将是执行此操作的首选方式,它还会验证他们的身份。


2
投票

理论上,您可以通过使用 WinNT 提供程序实例化

DirectoryEntry
对象来使用变通方法,使用户无需提供域管理员权限即可更改密码。您还可以考虑 here 发布的代码,它使用加密的数据库来存储管理员凭据。

这可能是一个冒险的举动,取决于您存储的性质(您可以使用机器 MAC 地址的哈希值作为密码吗?),但我不确定是否有另一种方法可以做到这一点。据我所知,如果没有经过身份验证的DirectoryEntry实例,

eMi
提供的答案将无法工作,尽管我可能是错的。

© www.soinside.com 2019 - 2024. All rights reserved.