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進行讀取訪問,這對您的應用程序可能不適用。