1

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

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

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

ユーザが複数のプロファイルを持つ可能性があるため、ユーザ名は機能しません。ローミングプロファイルが存在する可能性があるため、コンピュータ名と組み合わせて使用​​することはできません。


アップデート:私はちょうど同じドメイン内の2台のコンピュータ上HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\ProfileListでのSIDを見

。ローミングが有効になっていないため、私のユーザーアカウントは各マシン上に別個のプロファイルを持っています。両方のプロファイルは同じSIDでリストされます。つまり、自分のGUIDを生成し続ける必要があります。

答えて

3

Windowsユーザーおよびグループは、セキュリティ識別子(SID)を使用します。

セキュリティ識別子(SID)が は、Windowsオペレーティング・システムのセキュリティ プリンシパルまたはセキュリティグループを識別するために使用されることが可変長の 固有の値です。

Windowsに組み込まれているlist of predefined SIDsがあります。他のSIDは、現在のコンピュータの(ランダムに生成された96ビット)SIDとインクリメントされた番号を組み合わせて生成されます。

次の例では、4つのローカルユーザーアカウントのSIDを表示するコンピュータのアカウントを持っているユーザの

SIDは(The Microsoft policy concerning disk duplication of Windows XP installationsから採取)HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\ProfileList

サンプルの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ので、SIDが生成されているかのユーザー3

、彼らはする必要がありますユニーク。それらはWindowsプロファイルシステムの一部であるため、移動プロファイルはすべてのシステムで同じSIDを持つ必要があります。

2

ユーザープロファイルのセキュリティ識別子(SID)を使用できます。

LookupAccountName() Win32 APIは、ユーザー名とコンピュータ名を入力として受け取り、関連付けられたSIDを返します。

1

Rベームローズとスノークラッシュは正しいです、アカウントSIDはあなたが要求したものです。あなたは、この解決策が動作するためには、ローミングプロファイルを多く有効にすることが正しいです。ローミングプロファイルと呼ばれています。

ドメイン認証を使用してユーザーを識別したくない場合は、もう1つのオプションはWAS(Windows認証サービス)です。これは通常、ユビキタスASPNETDBデータベース内のMicrosoft SQL Server上に必ずしも実装されていますが、必須ではありません。

WASは、デスクトップソフトウェアでも使用できるASP.NET用の精巧なサポートを備えた、ドットネットソリューションです。どちらかが好きではない場合は、自分自身をロールバックすることができますが、これは私にとってリソースの最適ではないアプリケーションのようです。 dotnetソフトウェアを構築していないなら、WASを利用することはできますが、それほど便利ではありません。

1

この問題を解決するLDAP中心のソリューションをもっと使いたいかもしれませんが、アプリにとってもっと大変な作業かもしれません。

ADには、ユーザーに固有のフィールドがいくつかあります。ユーザーレコードのDN全体(つまり、DC = com、DC = example、CN = Users、DN = bob smith)を使用できます。これがADのレコードを独自に識別するものです。しかし、MSはUPNと呼ばれるフィールドも持っています。このフィールドは電子メールアドレスのように見えます(時にはそれです)、user @ domainの形式をとります。

もちろん、この情報にはADへの読み取りアクセスが必要です。これはアプリにとって実用的ではないかもしれません。

関連する問題