vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
sevAniGif - als kostenlose Vollversion auf unserer vb@rchiv CD Vol.5  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   RSS-Feeds  | Newsletter  | Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2019
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

Security für Entwickler
WindowsIdentity für anderen Benutzer 
Autor: keco
Datum: 12.02.10 17:38

Hallo,

mittels WindowsIdentity.GetCurrent kann ich Informationen über den aktuellen Benutzer erhalten. Wie kann ich aber nun Informationen über andere auf dem System eingerichtete Benutzer erhalten? Im Konstruktor von WindowsIdentity kann ich ein Token eines anderen Benutzers angeben. Aber wie komme ich an dieses Token? Ist das nur über eine API möglich oder gibt es da auch etwas im Framework?

Versucht habe ich bisher mit dem Benutzernamen oder der SID des Benutzernamens etwas anzufangen, komme aber zu keinem Erfolg.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: WindowsIdentity für anderen Benutzer 
Autor: ModeratorRalfE (Moderator)
Datum: 12.02.10 18:34

Welche Informationen möchtest du abrufen?

Ralf

MCPD, MCTS, MCAS

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: WindowsIdentity für anderen Benutzer 
Autor: keco
Datum: 12.02.10 18:39

Ich habe mir eine Klasse erstellt, die unter anderem mit den .GetAccessControl einer Datei etc. arbeitet. Beim Ermitteln der Berechtigungen möchte ich gerne auch andere Benutzer angeben können. Bisher sieht das bei mir so aus:
      ' Ermittle alle AuthorizationRule-Objekte
      Dim acl As AuthorizationRuleCollection = IO.File.GetAccessControl( _
        Me.Path).GetAccessRules( _
                                               True, True, GetType( _
                                               SecurityIdentifier))
 
      ' Iteriere durch jede enthaltende Rule
      For i As Integer = 0 To acl.Count - 1
         ' FileSystemAccessRule ermitteln
         Dim rule As FileSystemAccessRule = DirectCast(acl(i), _
           FileSystemAccessRule)
 
         ' Prüfe, ob diese Regel für den aktuellen Benutzer gilt
         If pUser.User.Equals(rule.IdentityReference) Then
Dabei habe ich folgende Definition:
   Private pUser As WindowsIdentity
Im Konstruktor wird dabei WindowsIdentity.GetCurrent an pUser übergeben. Dort soll es auch möglich sein einen Benutzername anzugeben, für den dann die Rechte ermittelt werden. Aber nicht nur die Rechte, sondern auch der DomainName, die zugehörige Gruppen etc.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: WindowsIdentity für anderen Benutzer 
Autor: ModeratorRalfE (Moderator)
Datum: 12.02.10 20:21

Alle ACL-Typen arbeiten mit der Klasse System.Security.Pricipal.IdentityReference, wovon es zwei abgeleitete Klassen gibt: NTAccount und SecurityIdentifier. Eine NTAccount-Klasse kannst du anhand eines Benutzer-/Gruppennamen und opt. Domainnamen erzeugen.

Ralf

MCPD, MCTS, MCAS

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: WindowsIdentity für anderen Benutzer 
Autor: keco
Datum: 12.02.10 20:30

Danke. Aber wie arbeite ich mit dem NTAccount weiter? Also wie kann ich dieses Objekt dann zum Auslesen der ACL verwenden? Und wie erhalte ich davon den UserName, Gruppenzugehörigekeiten und die anderen Informationen, die in über WindowsIdentity erhalte?
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: WindowsIdentity für anderen Benutzer 
Autor: ModeratorDaveS (Moderator)
Datum: 12.02.10 20:44

Eine authoriserte Identity bekommst du mit LogonUser() (und New WindowsIdentity(token)). Man muss immer das Passwort kennen um als ein Benutzer tätig zu sein mit etwa WindowsIdentiy.Impersonate().

________
Alle Angaben ohne Gewähr. Keine Haftung für Vorschläge, Tipps oder sonstige Hilfe, falls es schiefgeht, nur Zeit verschwendet oder man sonst nicht zufrieden ist

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: WindowsIdentity für anderen Benutzer 
Autor: keco
Datum: 12.02.10 20:54

Aus welchem Grund brauche ich denn das Passwort des Benutzerkontos um dessen Informationen auslesen zu können? Als Programmierer kenne ich das ja nicht. Da müsste der Anwender das Passwort dafür für jedes Konto selbst eingeben müssen. Keine schöne Sache. Aber vermutlich wird es dafür einen guten Grund geben.

Danke für die Antworten.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: WindowsIdentity für anderen Benutzer 
Autor: ModeratorDaveS (Moderator)
Datum: 12.02.10 21:19

Ich habe geschrieben "als ein Benutzer tätig zu sein". ZB "zum Auslesen der ACL verwenden" (wovon man übrigens keine Gruppenzugehörigkeit bekommt). Benutzerinfos kannst du zB mit ADSL auslesen, hat nichts wirklich mit WindowsIdentity zu tun. Gruppenzugehörigkeit bekommst du aber von WindowsIdentity mit solchem Code
        Dim irc As IdentityReferenceCollection = wi.Groups.Translate(GetType( _
          NTAccount))
        For Each ntacc As NTAccount In irc
            Debug.WriteLine(ntacc.ToString())
        Next
(wi = WindowsIdentity).

________
Alle Angaben ohne Gewähr. Keine Haftung für Vorschläge, Tipps oder sonstige Hilfe, falls es schiefgeht, nur Zeit verschwendet oder man sonst nicht zufrieden ist

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: WindowsIdentity für anderen Benutzer 
Autor: keco
Datum: 12.02.10 21:29

Ich danke dir. Ich werde mal morgen schauen, ob ich damit zurecht komme.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: WindowsIdentity für anderen Benutzer 
Autor: ModeratorRalfE (Moderator)
Datum: 12.02.10 21:32

Hier ein Beispiel, welches für einen Ordner alle ACL-Einträge ausließt und die dazugehörigen Benutzer über ihren Namen ausgegeben werden. Weiterhin, wie du für einen Benutzer alle Gruppen auslesen kannst. Für den zweiten Teil brauchst du einen Verweis auf System.DirectoryServices.AccountManagement, welcher neu mit .NET 3.5 eingeführt wurde.

Imports System.Security.AccessControl
Imports System.Threading
Imports System.Security.Principal
Imports System.IO
Imports System.DirectoryServices.AccountManagement
 
Module Module1
 
	Sub Main()
		Dim secFolder As DirectorySecurity = Directory.GetAccessControl("F:\TFS" & _
  "Builds")
 
		For Each r As FileSystemAccessRule In secFolder.GetAccessRules(True, True, _
  GetType(NTAccount))
			Console.WriteLine("{0}: {1} {2}", r.IdentityReference, r.FileSystemRights, _
r.AccessControlType)
		Next
 
		Console.WriteLine()
 
		Using ctx As New PrincipalContext(ContextType.Machine, _
  Environment.MachineName)
			Dim grp As Principal = Principal.FindByIdentity(ctx, IdentityType.Name, _
"Ralf")
 
			If grp IsNot Nothing Then
				For Each p As Principal In grp.GetGroups()
					Console.WriteLine(p.Name)
				Next
			Else
				Console.WriteLine("Nix Benutzerinfo")
			End If
		End Using
 
		Console.ReadLine()
	End Sub
 
End Module

Ralf

MCPD, MCTS, MCAS

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Sie sind nicht angemeldet!
Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.

Einloggen  |  Neu registrieren

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

Copyright ©2000-2019 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel