我正在开发许可证管理系统。根据在SO上找到的一些建议,我将通过检索用户的Windows安全身份(SID)来获得唯一的用户标识符。
我对两个主题有疑问。
在深入探讨该主题之前,我已经阅读了几种SID。
我知道与NT帐户相关的是一个“本地” SID:
Dim LocalAccountSID As New System.Security.Principal.NTAccount(Environment.UserDomainName, Environment.MachineName)
我了解公司帐户通过ActiveDirectory使用了一个“网络” SID。
Dim ActiveDirectorySID as New System.DirectoryServices.DirectoryEntry(String.Format("WinNT://{0},Computer", Environment.MachineName))
我首先要确保我没有混淆:
LocalAccountSID
与给定计算机上的Windows安装链接。也就是说,如果我在同一台计算机上有2个用户,则他们都将具有相同的LocalAccountSID。如果我在两台计算机上有一个用户,则他们将具有不同的LocalAccountSID。ActiveDirectorySID
与给定用户的 Active Directory帐户相关联。也就是说,如果我在同一台计算机上有2个用户,则他们将具有不同的ActiveDirectorySID。如果我在两台计算机上有1个用户,则他们将具有相同的ActiveDirectorySID。我还想知道每台计算机是否都有LocalAccountSID? 我想只有公司帐户才有ActiveDirectorySID。我怎么知道当前的计算机是否有一台? (有什么比“尝试...捕获”更聪明的方法吗?)
我无法将NTAccount
转换为SecurityIdentifier
。
Dim LocalAccount As New System.Security.Principal.NTAccount(Environment.UserDomainName, Environment.MachineName)
Dim LocalAccountSID As Security.Principal.SecurityIdentifier
LocalAccountSID = LocalAccountSID.Translate(GetType(Security.Principal.SecurityIdentifier))
Console.WriteLine(LocalAccountSID .Value)
Console.ReadKey()
上面的代码给我以下错误:
部分或全部身份证明文件无法翻译
我在这里做错了什么? 用C#解决方案是可以接受的。