1

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

客户端应用程序将首先使用将具有 GUID 的文件或注册表项写入当前配置文件。此 GUID 随后将用作服务器上配置数据库中的键。

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

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


更新:

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

4

4 回答 4

4

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

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

有一个Windows 内置的预定义 SID 列表。其他 SID 是通过将当前计算机的(随机生成的,96 位的)SID 与递增的数字组合来生成的。

在计算机上拥有帐户的用户的 SID 存储在注册表中HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\ProfileList

示例 SID(取自Microsoft 关于 Windows XP 安装的磁盘复制的政策):

以下示例显示四个本地用户帐户的 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 用户 3

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

于 2009-04-24T20:26:02.783 回答
2

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

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

于 2009-04-24T20:44:44.440 回答
1

R Bemrose 和 snowccrash 是正确的,帐户 SID 正是您所要求的。您是正确的,为了使此解决方案能够正常工作,您需要启用漫游配置文件;这就是为什么它们被称为漫游配置文件。

如果您不想使用域身份验证来识别用户,那么您的另一个选择是 WAS(Windows 身份验证服务)。这通常但不一定在无处不在的 ASPNETDB 数据库中的 Microsoft SQL Server 上实现。

WAS 是一个 dotnet 解决方案,对 ASP.NET 提供了详尽的支持,也可用于桌面软件。如果你也不喜欢这样,你可以自己动手,但在我看来,这似乎是资源的次优应用。如果您不构建 dotnet 软件,您仍然可以利用 WAS,但它不会那么方便。

于 2009-04-25T10:12:02.673 回答
1

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

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

当然,此信息需要对 AD 的读取权限,这对您的应用程序可能不实用。

于 2009-04-25T14:32:42.140 回答