【问题标题】:Unique identifier for user profiles in WindowsWindows 中用户配置文件的唯一标识符
【发布时间】:2010-10-21 16:57:25
【问题描述】:

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

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

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

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


更新:

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

【问题讨论】:

    标签: windows language-agnostic network-programming registry uniqueidentifier


    【解决方案1】:

    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 用户 3

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        【解决方案3】:

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

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

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

        【讨论】:

          【解决方案4】:

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

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

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

          【讨论】:

            猜你喜欢
            • 2023-03-22
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2012-04-25
            • 1970-01-01
            • 2013-11-19
            • 1970-01-01
            • 2021-10-30
            相关资源
            最近更新 更多