1

Pour une application client/serveur, je dois stocker de manière centralisée des parties des informations de configuration qui vont généralement dans le répertoire du profil de l'utilisateur.Identificateur unique pour les profils utilisateur dans Windows

Lors de la première utilisation, l'application cliente écrirait une entrée de fichier ou de registre avec un GUID dans le profil courant. Ce GUID sera ensuite utilisé comme clé dans la base de données de configuration sur le serveur.

Maintenant, je me demande si les profils utilisateur Windows ont déjà des identifiants uniques que je pourrais utiliser au lieu de générer mes propres GUID.

Le nom d'utilisateur ne fonctionnera pas car les utilisateurs peuvent avoir plusieurs profils. La combinaison avec le nom de l'ordinateur ne fonctionnera pas car il peut y avoir des profils itinérants.


Mise à jour:

Je viens de regarder les SIDs dans HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\ProfileList sur deux ordinateurs dans le même domaine. L'itinérance n'est pas activée, donc mon compte d'utilisateur a un profil distinct sur chaque machine. Les deux profils sont répertoriés avec le même SID. Cela signifie que je dois continuer à générer mes propres GUID.

Répondre

3

Les utilisateurs et groupes Windows utilisent des identificateurs de sécurité (SID).

est une valeur unique de longueur variable un identificateur de sécurité (SID) qui est utilisé pour identifier un groupe principal ou de sécurité sécurité dans les systèmes d'exploitation de Windows .

Il existe un list of predefined SIDs intégré à Windows. Les autres SID sont générés en combinant le SID de l'ordinateur actuel (généré aléatoirement, 96 bits) avec un nombre incrémenté.

SIDs des utilisateurs qui ont des comptes sur un ordinateur sont stockés dans le Registre sous HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\ProfileList

SIDs exemples (prises de The Microsoft policy concerning disk duplication of Windows XP installations):

L'exemple suivant affiche les SIDs pour quatre comptes d'utilisateurs locaux. Notez que seuls les quatre derniers chiffres sont incrémentés lorsque de nouveaux comptes sont ajoutés.

  • S-1-5-21-191058668-193157475-1542849698-500 administrateur
  • S-1-5-21-191058668-193157475-1542849698-1000 utilisateur 1
  • S-1-5 -21-191058668-193157475-1542849698-1001 utilisateur 2
  • S-1-5-21-191058668-193157475-1542849698-1002 utilisateur 3

en raison de la façon dont sont générés SIDs, ils devraient être unique. Comme ils font partie du système de profil Windows, les profils itinérants doivent avoir le même SID sur chaque système.

2

Vous pouvez utiliser l'identificateur de sécurité (SID) du profil utilisateur. L'API Win32 de LookupAccountName() prend un nom d'utilisateur et un nom d'ordinateur en entrée et vous renvoie le SID associé.

1

R Bemrose et snowccrash sont corrects, le compte SID est précisément ce que vous avez demandé. Vous avez raison de dire que pour que cette solution fonctionne, vous pouvez activer les profils itinérants. C'est pourquoi on les appelle des profils itinérants.

Si vous ne souhaitez pas utiliser l'authentification de domaine pour identifier les utilisateurs, votre autre option est WAS (Windows Authentication Services). Ceci est généralement mais pas nécessairement implémenté sur Microsoft SQL Server dans la base de données ASPNETDB omniprésente.

WAS est une solution dotnet, avec un support élaboré pour ASP.NET, également disponible pour les logiciels de bureau. Si vous n'aimez pas non plus cela, vous pouvez rouler le vôtre mais cela me semble une application sous-optimale des ressources. Si vous ne construisez pas de logiciel dotnet, vous pouvez toujours exploiter WAS, mais ce ne sera pas aussi pratique.

1

Je pourrais utiliser une solution plus centrée sur LDAP pour ce problème, mais cela pourrait être beaucoup plus de travail pour votre application.

Il existe quelques champs uniques dans AD pour l'utilisateur. Vous pouvez utiliser le DN complet d'un enregistrement d'utilisateur (c'est-à-dire DC = com, DC = exemple, CN = Users, DN = bob smith). C'est ce qui identifie de manière unique un enregistrement dans AD. Cependant, MS a également un champ appelé UPN, qui ressemble à une adresse e-mail (parfois c'est) et prend la forme utilisateur @ domaine.

Bien sûr, cette information nécessite un accès en lecture à AD et cela peut ne pas être pratique pour votre application.

Questions connexes