2013-04-19 19 views
9

, kullanıcı SID bir dize gibi ile temsil edilir:Dizenin kullanıcı SID olup olmadığı nasıl belirlenir? Windows İşletim Sisteminde

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

herhangi bir yolu var mı ben böyle bir dizenin geçerli bir Kullanıcı SID'si olduğunu belirleyebilir mi?

Teşekkürler.

+8

Doğrulama veya doğrulama mı arıyorsunuz? Doğrulama için SID'den bir hesap almayı deneyin. ([Bir SID'den C# içindeki bir hesap adına nasıl dönüşebilirim?] (Http://stackoverflow.com/q/499053/1386111)) –

+0

Hayır, doğrulama için arıyorum. Teşekkürler –

+0

@ChibuezeOpata Doğrulama için bir çözüm önerdi - "Doğrulama için SID'den bir hesap almayı deneyin." – DGibbs

cevap

23

Security Identifiers açıklamasına göre, SID formu aşağıdaki (o bir ila ondört alt yetki değerlere sahiptir) etti:

S-1-<identifier authority>-<sub1>-<sub2>-…-<subn>-<rid> 
Sen dize bu kalıbı eşleşirse kontrol etmek için düzenli ifade kullanabilirsiniz

:

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); 

Bu, girdi dizesinin geçerli biçim olmasını sağlayacaktır, ancak bu SID'nin geçerli olduğunu kanıtlamaz. Yorumlarda önerildiği gibi, geçerli SID'niz olup olmadığını kontrol etmeniz gerekiyorsa hesabı almayı denemeniz gerekir.

5

Bazı iyi bilinen güvenlik tanımlayıcılarına izin veren bu küçük değişiklikler yardımcı oldu. Örneğin, iyi bilinen sid herkes S-1-1-0

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

Yararlı ek, teşekkürler – Basic

1

normal ifade sınırlandırmak olmak "S \ d \ d \ d + - \ d + - \ d + - \ d + - \ w +"

1

SID'nin geçerli olup olmadığını kontrol etmek için normal ifadeye güvenmek iyi bir fikir değildir. Tek geçerli SID sürümü 1'dir, bu nedenle bu regex 9 geçerli bir sürüm değilse S-9-(\d+-){1,14}\d+ geçerli olduğunu düşünür. Ancak, regex'in yalnızca sürüm 1'e izin vermek için başarısız olması, yeni bir SID sürümü veya tamamen yeni bir SID formatı tarafından yapılmalıdır. Bunu yapmanın daha iyi yolu, SID'nin geçerli olup olmadığına sistemin karar vermesine izin vermektir. Sadece bu yapın:

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 
} 

(örneğin sürüm 1 değilse veya alt makamların sayısı 1'den 15'e veya daha az üzerinde ise) yapıcısı ArgumentException olacak SID biçimi geçersiz edin. SID'nin gerçek bir mevcut hesap olup olmadığını kontrol etmek isterseniz, SecurityIdentifier numaralı telefondan IsAccountSid numaralı telefonu arayın.

İlgili konular