Benutzer mit den meisten Antworten
C# SID einer lokalen Gruppe in den Gruppenname übersetzen.

Frage
-
Hallo Zusammen,
so ich bin grad dabei ein kleines Tool zur Administration für meine Firma in c# zu schreiben.
nun habe ich folgendes Problem und zwar versuche ich auf einem netfiler alle NTFS-Berechtigungen auszulesen, dies klappt auch ohne weitere Probleme, allerdings bekomme ich bei lokalen Gruppen nur deren SID und nicht den Namen.
Wie komme ich den nun von der SID auf den Gruppen-Name (der lokalen Gruppe) ich habe es so versucht.
private string translate_sid(string sid) { SecurityIdentifier trans_sid = new SecurityIdentifier(sid); NTAccount acct = (NTAccount)trans_sid.Translate(typeof(NTAccount)); System.DirectoryServices.ActiveDirectory.Domain.GetCurrentDomain(); return acct.ToString() ; }
allerdings funktioniert das ganze nicht.Fehlermeldung : Manche oder alle Identitätsverweise konnten nicht übersetzt werden.
Hoffe mir kann jemand helfen :)
grüße yo.yo
Antworten
-
Hallo,
Du wirst Dich schon mit den Grundlagen der Windows SAM Datenbank auseinandersetzen müssen.
Grundsätzlich gilt: Lokale Konten und Gruppen werden lokal beim jeweiligen Rechner gespeichert.
Der Zugriff kann nur dann vunktionieren wenn man auf eben diese Datenbank zugreift.Verwendet man ein (AD) Domänen-Konto wird man keinen Ergebnis erhalten,
da die Konten dort nicht bekannt (gespeichert) sind.Bei der Methode LookupAccountSid muss lpSystemName mit dem entsprechenden Rechnernamen
versorgt werdem (und bitte die Beschreibung dort lesen => das Ergebnis hängt u. U. davon ab,
auf welchem Rechner Du die Funktion aufrufst).Beispielcode für Dein Szenario kann ich Dir mangels Test-Masse (Rechner) nicht liefern.
Gruß Elmar
- Als Antwort vorgeschlagen Robert BreitenhoferModerator Dienstag, 10. Januar 2012 15:04
- Als Antwort markiert Robert BreitenhoferModerator Dienstag, 10. Januar 2012 15:59
-
Hallo,
LookupAccountSID kann man auch für entfernte Rechner verwenden:
How to convert the SDDL form of an SID to a SAM account name
(als der Artikel entstand gabs noch kein C#)Translate funktioniert nur mit lokalen und Domänen-Konten, siehe Antwort zu:
http://stackoverflow.com/questions/499053/how-can-i-convert-from-a-sid-to-an-account-name-in-c-sharpBeispielcode findet Du bei PInvoke.NET.
Gruß Elmar
- Als Antwort vorgeschlagen PK95 Montag, 19. Dezember 2011 18:34
- Als Antwort markiert Robert BreitenhoferModerator Dienstag, 27. Dezember 2011 11:56
Alle Antworten
-
Hallo yo.yo,
siehe http://stackoverflow.com/questions/380031/the-best-way-to-resolve-display-username-by-sid
und dazu http://www.pinvoke.net/default.aspx/advapi32.LookupAccountSid
Gruß Elmar
-
Hey... :) erstmal vielen Dank, für die schnelle Antwort ;)
leider helfen mir die Links auch nicht wirklich weiter.... muss vielleicht dazu sagen, dass ich noch ziemlich frisch in C# bin ;)
das Problem bei mir ist, dass sich die Gruppen lokal auf einem anderen Rechner (Netfiler) im Netzwerk befinden...
hab jetzt im Internet gelesen, dass ich mich über LDAP zu dem Rechner im Netzwerk verbinden muss...
hab aber leider überhaupt kp, wie ich des berwerkstelligen soll und vorallem wie ich das ganze mit dem Translate Befehle verbinde -.-
vllt. kann mir ja jemand ein paar Zeilen Bsp.-Code posten....das wäre super :-)
grüße
-
Hallo,
LookupAccountSID kann man auch für entfernte Rechner verwenden:
How to convert the SDDL form of an SID to a SAM account name
(als der Artikel entstand gabs noch kein C#)Translate funktioniert nur mit lokalen und Domänen-Konten, siehe Antwort zu:
http://stackoverflow.com/questions/499053/how-can-i-convert-from-a-sid-to-an-account-name-in-c-sharpBeispielcode findet Du bei PInvoke.NET.
Gruß Elmar
- Als Antwort vorgeschlagen PK95 Montag, 19. Dezember 2011 18:34
- Als Antwort markiert Robert BreitenhoferModerator Dienstag, 27. Dezember 2011 11:56
-
Hallo yo.yo,
Ich gehe davon aus, dass die Antwort Dir weitergeholfen hat.
Solltest Du noch "Rückfragen" dazu haben, so gib uns bitte Bescheid.Grüße,
RobertRobert Breitenhofer, MICROSOFT
Bitte haben Sie Verständnis dafür, dass im Rahmen dieses Forums, welches auf dem Community-Prinzip „Entwickler helfen Entwickler“ beruht, kein technischer Support geleistet werden kann oder sonst welche garantierten Maßnahmen seitens Microsoft zugesichert werden können. -
Hallo
... sorry erstmal, dass ich erst jetzt wieder schreib... aber hatte bis heute Urlaub ;-)
so hab des mir jetzt mal alles bischen angeschaut und auch selbst, ein bischen noch im Internet gesucht....
und folgendes gefunden: http://www.codeproject.com/KB/cs/sidtranslator.aspx funktioniert aber auch leider nicht. (Auch die Demo nicht)
Bin auch wie gesagt, noch nicht so richtig fit im Programmieren allgemein (bin FI Azubi im 2.Jahr) ;-)
Vielleicht, kann man mir ja auch anderst helfen. Ich schildere einfach mal mein Problem.... und zwar, hab ich die Aufgabe, die lokalen Gruppen und deren Member eines netfilers in die AD zu übertragen, (was mir mittels eines PS-Scripts auch schon gelungen ist).
Nun im 2. Schritt, soll ich die alten lokalen Gruppen durch die neu angelegten Gruppen der AD bei den Ordner-Berechtigungen, auf dem Netfiler ersetzen.
Nun kommt mein Problem, wenn ich nun versuche, die Ordner-berechtigungen mittels eines Scripts oder Programms auszulesen, bekomm ich nicht den Namen der Gruppen sondern nur deren SID. Um die Gruppen zu tauschen brauch ich aber deren Namen, da ich die alten Gruppen mittels Regex mit den neue Gruppen vergleichen möchte und sollten die Namen überein stimmen, die Gruppen austauschen möchte.
hoffe, dass ich mich einigermaßen verständlich ausdrücken konnte. ;-)
nun hier bei mir in der Firma kann mir leider auch keiner so wirklich weiter helfen... hoffe nur, dass ich das nicht alles manuell machen muss ;-)
naja vllt. hab ich ja Glück und mir kann doch noch einer helfen :)
Grüße
- Bearbeitet Robert BreitenhoferModerator Dienstag, 10. Januar 2012 10:12 URL als Link
-
und folgendes gefunden: http://www.codeproject.com/KB/cs/sidtranslator.aspx funktioniert aber auch leider nicht. (Auch die Demo nicht)
Hallo yo.yo,
Was funktioniert nicht in der Demo? Die entfernten Rechner? Bei mir funktioniert die Demo (sie ergibt den SID für lokale Users + entfertnte Users+ lokale Groups und meinem lokalen Computer(Name)).
Grüße,
Robert
Robert Breitenhofer, MICROSOFT
Bitte haben Sie Verständnis dafür, dass im Rahmen dieses Forums, welches auf dem Community-Prinzip „Entwickler helfen Entwickler“ beruht, kein technischer Support geleistet werden kann oder sonst welche garantierten Maßnahmen seitens Microsoft zugesichert werden können. -
Hallo Robert,
also wenn ich versuche die SID von Gruppen zu Übersetzen, welche lokal auf einem NetApp Netfiler liegen , funktioniert es nicht, es erscheint dann eine Fehlermeldung, dass die SID nicht übersetzt werden konnte.
Grüße
- Bearbeitet yo.yo Dienstag, 10. Januar 2012 12:10
-
Hallo,
Du wirst Dich schon mit den Grundlagen der Windows SAM Datenbank auseinandersetzen müssen.
Grundsätzlich gilt: Lokale Konten und Gruppen werden lokal beim jeweiligen Rechner gespeichert.
Der Zugriff kann nur dann vunktionieren wenn man auf eben diese Datenbank zugreift.Verwendet man ein (AD) Domänen-Konto wird man keinen Ergebnis erhalten,
da die Konten dort nicht bekannt (gespeichert) sind.Bei der Methode LookupAccountSid muss lpSystemName mit dem entsprechenden Rechnernamen
versorgt werdem (und bitte die Beschreibung dort lesen => das Ergebnis hängt u. U. davon ab,
auf welchem Rechner Du die Funktion aufrufst).Beispielcode für Dein Szenario kann ich Dir mangels Test-Masse (Rechner) nicht liefern.
Gruß Elmar
- Als Antwort vorgeschlagen Robert BreitenhoferModerator Dienstag, 10. Januar 2012 15:04
- Als Antwort markiert Robert BreitenhoferModerator Dienstag, 10. Januar 2012 15:59