1

クライアント/サーバーアプリケーションの場合、通常はユーザープロファイルディレクトリに入る構成情報の一部を一元的に保存する必要があります。

クライアントアプリケーションは、最初にGUIDを使用してファイルまたはレジストリエントリを現在のプロファイルに書き込みます。このGUIDは、その後、サーバー上の構成データベースのキーとして使用されます。

ここで、Windowsユーザープロファイルに、独自のGUIDを生成する代わりに使用できる一意の識別子がすでにあるかどうか疑問に思っています。

ユーザーが複数のプロファイルを持っている可能性があるため、ユーザー名は機能しません。移動プロファイルがある可能性があるため、コンピューター名と組み合わせても機能しません。


アップデート:

HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\ProfileList同じドメイン内の2台のコンピューターの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(Windows XPインストールのディスク複製に関するMicrosoftポリシーから取得):

次の例は、4つのローカルユーザーアカウントのSIDを表示します。新しいアカウントが追加されると、最後の4桁のみが増分されることに注意してください。

  • 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の生成方法のため、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 はまさにあなたが要求したものです。このソリューションを機能させるには、ローミング プロファイルを有効にする必要があります。そのため、移動プロファイルと呼ばれています。

ドメイン認証を使用してユーザーを識別したくない場合、もう 1 つのオプションは 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 に答える