Convertire SID di nomi utente / gruppi?
-
10-10-2019 - |
Domanda
Sto scorrendo una directory di rete e cercando di uscita i nomi utente / gruppo (permessi) associati ad ogni file / cartella. Sto ottenendo schiena del SID, ma voglio i nomi come "group_test" e non "S-1-5-32-544". Ecco il mio codice -
var files = Directory.GetFiles(path, "*.*", SearchOption.TopDirectoryOnly);
foreach (var f in files2)
{
var fileInfo = new FileInfo(f);
var fs = fileInfo.GetAccessControl(AccessControlSections.Access);
foreach (FileSystemAccessRule rule in fs.GetAccessRules(true, true, typeof(System.Security.Principal.NTAccount)))
{
var value = rule.IdentityReference.Value;
Response.Write(string.Format("File: {0} \t Usergroup: {1} <br/>", fileInfo.Name, value));
} }
ottengo SID dal codice di cui sopra, ma nel ciclo foreach, se uso questo posto -
(NTAccount)((SecurityIdentifier)rule.IdentityReference).Translate(typeof(NTAccount)).Value
ottengo questa eccezione -
Some or all identity references could not be translated.
Sembra che il metodo translate non funziona sulle azioni remote. Come faccio a recuperare i veri nomi dei SID? Il server remoto non ha LDAP.
Grazie.
Soluzione
Il problema è che si sta tentando di risolvere un SID che è locale per una macchina remota. Per quanto la risposta a questa domanda stati:
L'oggetto SecurityReference è metodo translate funziona su SID non locali, ma solo per il dominio conti ...
collegamento fornisce un esempio per risolvere a distanza un SID utilizzando WMI, che è probabilmente il metodo migliore per realizzare il vostro compito.
Altri suggerimenti
Se è possibile utilizzare WMI si dovrebbe essere in grado di farlo attraverso il Win32_UserAccount classe penso. Ha una proprietà Name
e una proprietà SID
.
Win32_Group per i gruppi.
Ecco un articolo per il collegamento ad un PC remoto tramite WMI che ha codice C #: Procedura: connettersi a un computer remoto