2013-04-19 22 views
9

In Windows-Betriebssystem, Benutzer SIDs mit einem String dargestellt werden, wie zum Beispiel:Wie ermittelt man, ob eine Zeichenfolge eine Benutzer-SID ist?

S-5-1-76-1812374880-3438888550-261701130-6117

Gibt es eine Möglichkeit, dass ich kann erkennen, dass eine solche Zeichenfolge eine gültige Benutzer-SID ist?

Danke.

+8

Suchen Sie eine Validierung oder Verifikation? Zur Überprüfung versuchen Sie einfach ein Konto von der SID zu bekommen. ([Wie kann ich von einer SID zu einem Kontonamen in C# konvertieren] (http://stackoverflow.com/q/499053/1386111)) –

+0

Nein, ich suche nach Verifizierung. Danke –

+0

@ChibuezeOpata Er schlug eine Lösung für die Verifikation - 'Zur Verifikation einfach versuchen, ein Konto von der SID zu bekommen.' – DGibbs

Antwort

23

Nach Security Identifiers Beschreibung SID folgende Form hat (es hat einem bis vierzehn Subauthority Werte):

S-1-<identifier authority>-<sub1>-<sub2>-…-<subn>-<rid> 

Sie reguläre Ausdrücke verwenden können, um zu überprüfen, ob Zeichenfolge dieses Muster passt:

string input = "S-5-1-76-1812374880-3438888550-261701130-6117"; 
string sidPattern = @"^S-\d-\d+-(\d+-){1,14}\d+$"; 
bool isValidFormat = Regex.IsMatch(input, sidPattern); 

Dadurch wird sichergestellt, dass die Eingabezeichenfolge das gültige Format hat, aber das beweist nicht, dass die SID gültig ist. Wie in den Kommentaren empfohlen, sollten Sie versuchen, einen Account zu erhalten, wenn Sie überprüfen müssen, ob Sie eine gültige SID haben.

5

Ich fand diese kleine Variante hilfreich, die einige bekannte Sicherheitskennungen ermöglicht. Zum Beispiel, S-1-1-0 die bekannte sid Jeder

^S-\d-(\d+-){1,14}\d+$ 
+0

Nützliche Ergänzung, danke – Basic

1

Die regex shoud sein "S- \ d- \ d- \ d + - \ d + - \ d + - \ d + - \ w +"

1

Es ist keine gute Idee, sich auf eine Regex zu verlassen, um zu überprüfen, ob eine SID gültig ist. Zum einen ist die einzige gültige SID-Version 1, so dass dieser Regex denkt, dass S-9-(\d+-){1,14}\d+ gültig ist, wenn 9 keine gültige Version ist. Das Reparieren des Regex auf Version 1 würde jedoch fehlschlagen, sollte es jemals eine neue SID-Version oder gar ein komplett neues SID-Format geben. Der bessere Weg dazu ist, dass das System entscheidet, ob die SID gültig ist. Genau dies tut:

string notSureIfSID = "S-9-5-76-1812374880-3438888550-261701130-6117"; 
bool sidIsValid = false; 
bool sidIsAccount = false; 
try { 
    SecurityIdentifier sid = new SecurityIdentifier(notSureIfSID); 
    sidIsValid = true; 
    sidIsAccount = sid.IsAccountSid(); 
} 
catch (ArgumentException) { 
    // Handle invalid SID 
} 

Wenn das SID-Format ungültig ist (wenn zum Beispiel der Version nicht 1 oder die Anzahl der Unterbehörden ist mehr als 15 oder weniger als 1) der Konstruktor wird ein Argument werfen. Wenn Sie überprüfen möchten, ob die SID ein tatsächlich vorhandenes Konto ist, rufen Sie einfach IsAccountSid unter SecurityIdentifier an.

Verwandte Themen