作为LocalSystem运行的C#程序如何临时模拟另一个用户的登录标识?粗略地说,我有一个Windows服务,我想作为LocalSystem运行,但有时模仿用户XYZ(当使用Windows集成安全性连接到数据库时).
最重要的是:有没有办法在不知道其他用户密码的情况下做到这一点?
注意:如果密码是强制性的,则建议安全地存储密码(c#和/或vbscript).
在我的WPF应用程序中,我希望允许管理员使用集成安全性为各种其他用户测试数据库连接.所以我有一个表单,允许管理员输入域名,用户名和密码,然后测试它.我能够安全地处理密码,直到我打电话LogonUser给advapi32.dll它需要一个string password
LogonUser(UserName, Domain, Password, LOGON32_LOGON_INTERACTIVE, LOGON32_PROVIDER_DEFAULT, ref UserHandle)
Run Code Online (Sandbox Code Playgroud)
我编写了一个实用程序函数,它将SecureString转换为尽可能安全的字符串,然后在LogonUser调用中将其调用密码:
LogonUser(UserName, Domain, Helper.ConvertSafely(Password), LOGON32_LOGON_INTERACTIVE, LOGON32_PROVIDER_DEFAULT, ref UserHandle)
Run Code Online (Sandbox Code Playgroud)
由于LogonUser的签名采用字符串,除非LogonUser在执行时正确地处理密码,否则在调用返回后它仍然可以在我的调用堆栈中以纯文本形式存在.是否有一种更安全的方式来冒充用户,在这种情况下,我可以确信PW一直是安全的?
基本上我只需要一个WindowsImpersonationContext但是我想在没有密码的情况下以纯文本形式获取它.
假设我是Windows7机顶盒的管理员.我希望能够在不知道密码的情况下以其他用户身份运行命令.这就是linux上发生的事情.如果我是root用户,我可以"su"到其他帐户而不提供任何密码并以自己的名义运行命令.
我这里有一个情况。使用Python,我创建了一个进程(以系统或管理员用户身份运行),并且我需要使用不同的用户名(无需密码)调用应用程序。因此,阅读下面的链接,结论是可能的,使用 Kerberos 模拟另一个没有密码的用户...但我没有找到任何用 Python 编写的解决方案,实际上我不知道是否有更好的方法来解决这个问题。
https://blogs.msdn.microsoft.com/winsdk/2015/08/28/logon-as-a-user-without-a-password/
Python 3.4.1 x64、Windows 7。
任何人都可以帮助我吗?
非常感谢!