对于客户端/服务器应用程序,我需要集中存储通常进入用户配置文件目录的部分配置信息。
客户端应用程序首先会使用GUID将文件或注册表项写入当前配置文件。此GUID随后将用作服务器上配置数据库中的密钥。
现在我想知道Windows用户配置文件是否已经具有我可以使用的唯一标识符,而不是生成我自己的GUID。
用户名无效,因为用户可能有多个个人资料。将它与计算机名称组合将无法正常工作,因为可能存在漫游配置文件。
的更新
我只是查看了同一域中两台计算机上HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\ProfileList
中的SID。漫游未启用,因此我的用户帐户在每台计算机上都有一个单独的配置文件。两个配置文件都列出了相同的SID。这意味着我必须继续生成自己的GUID。
答案 0 :(得分:4)
Windows用户和组使用安全标识符(SID)。
安全标识符(SID)是 可变长度的唯一值 用于识别安全性 Windows中的主体或安全组 操作系统。
Windows内置了list of predefined SIDs。通过将当前计算机(随机生成的,96位)SID与递增数字组合来生成其他SID。
在计算机上拥有帐户的用户的SID存储在HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\ProfileList
样本SID(取自The Microsoft policy concerning disk duplication of Windows XP installations):
以下示例显示四个本地用户帐户的SID。请注意,添加新帐户时,只会增加最后四位数字。
由于生成SID的方式,它们应该是唯一的。由于它们是Windows配置文件系统的一部分,因此漫游配置文件在每个系统上都应具有相同的SID。
答案 1 :(得分:2)
您可以使用用户个人资料的安全标识符(SID)。
LookupAccountName() Win32 API将用户名和计算机名称作为输入,并返回关联的SID。
答案 2 :(得分:1)
R Bemrose和snowccrash是正确的,帐户SID正是您所要求的。你是正确的,为了使这个解决方案有效,你可以启用漫游配置文件;这就是为什么他们被称为漫游配置文件。
如果您不想使用域身份验证来识别用户,那么您的其他选项是WAS(Windows身份验证服务)。这通常但不一定在无处不在的ASPNETDB数据库中的Microsoft SQL Server上实现。
WAS是一个dotnet解决方案,具有对ASP.NET的精心支持,也可用于桌面软件。如果您不喜欢这样,您可以自己动手,但这对我来说似乎是资源的次优应用。如果你没有构建dotnet软件,你仍然可以利用WAS,但它不会那么方便。
答案 3 :(得分:1)
我可能会使用更多以LDAP为中心的解决方案解决此问题,但对您的应用来说可能会有更多工作。
AD中有一些独特的字段供用户使用。您可以使用用户记录的整个DN(即DC = com,DC =示例,CN = Users,DN = bob smith)。这就是AD中唯一标识记录的内容。但是,MS也有一个名为UPN的字段,它看起来像一个电子邮件地址(有时是),其格式为user @ domain。
当然,此信息需要对AD的读取权限,这可能对您的应用程序不切实际。