1

对于客户端/服务器应用程序,我需要集中存储通常进入用户配置文件目录的部分配置信息。Windows中用户配置文件的唯一标识符

客户端应用程序在首次使用时会将带有GUID的文件或注册表项写入当前配置文件。此GUID随后将用作服务器上配置数据库中的密钥。

现在我想知道如果Windows用户配置文件已经有我可以使用的唯一标识符,而不是生成我自己的GUID。

用户名不起作用,因为用户可能有多个配置文件。将它与计算机名称组合将不起作用,因为可能存在漫游配置文件。


更新:

我只是看着小岛屿发展中国家HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\ProfileList在两台计算机在同一个域中。漫游未启用,因此我的用户帐户在每台计算机上都有单独的配置文件。两个配置文件都以相同的SID列出。这意味着我必须继续生成我自己的GUID。

回答

3

Windows用户和组使用安全标识符(SID)。

的安全标识符(SID)是可变长度的 唯一值 用于标识在Windows 操作系统安全 主体或安全组。

有一个Windows内置的list of predefined SIDs。其他SID是通过将当前计算机(随机生成的96位)SID与增加的数字组合生成的。有在计算机上帐户的用户的

的SID存储在注册表下HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\ProfileList

样品的SID(从The Microsoft policy concerning disk duplication of Windows XP installations截取):

下面的示例显示四个本地用户帐户的SID。请注意,只有最后四位数字会随着新帐户的增加而增加。

  • S-1-5-21-191058668-193157475-1542849698-500管理员
  • S-1-5-21-191058668-193157475-1542849698-1000用户1
  • S-1-5 -21-191058668-193157475-1542849698-1001用户2
  • S-1-5-21-191058668-193157475-1542849698-1002由于是如何产生的SID的用户3

,它们应该独特。由于它们是Windows配置文件系统的一部分,因此漫游配置文件应在每个系统上具有相同的SID。

2

您可以使用用户配置文件的安全标识符(SID)。

The LookupAccountName() Win32 API将用户名和计算机名称作为输入,并返回关联的SID。

1

R Bemrose和snowccrash是正确的,帐户SID正是你所要求的。你是正确的,为了让这个解决方案能够运行你的漫游配置文件;这就是为什么他们被称为漫游配置文件。

如果您不想使用域身份验证来识别用户,则您的其他选项是WAS(Windows身份验证服务)。这通常但不一定是在无处不在的ASPNETDB数据库中的Microsoft SQL Server上执行的。

WAS是一个dotnet解决方案,精心支持ASP.NET,也可用于桌面软件。如果你不喜欢这一点,你可以推出自己的产品,但这对我来说似乎是一个不太理想的资源应用。如果你没有构建dotnet软件,你仍然可以利用WAS,但它不会那么方便。

1

我可能会使用更多以LDAP为中心的解决方案来解决这个问题,但它可能会为您的应用程序做更多工作。

AD中有几个独特的字段供用户使用。您可以使用用户记录的全部DN(即DC = com,DC =示例,CN = Users,DN = bob smith)。这就是唯一识别AD中的记录的方法。但是,MS也有一个名为UPN的字段,它看起来像一个电子邮件地址(有时是),并采用user @ domain的形式。

当然,这些信息需要对AD进行读取访问,这对您的应用程序可能不适用。