2011-11-30 6 views
9

Sto provando a determinare a livello di codice se l'utente corrente ha determinate autorizzazioni su un determinato oggetto Active Directory (in questo caso, sto provando a determinare se l'utente ha il permesso "Invia come" per un altro utente o distribuzione di Exchange lista oggetto).Come si interrogano le autorizzazioni effettive su un oggetto Active Directory?

Ho già capito come accedere all'attributo ntSecurityDescriptor utilizzando ADSI: È possibile enumerare gli ACE nella proprietà DiscretionaryACL di IADsSecurityDescriptor. Ma:

  • Come determinare da tali dati se la conferma "Invia come" è esplicitamente consentita o negata per un trustee?
  • Come faccio a scoprirlo quando il permesso è stato concesso indirettamente tramite l'appartenenza al gruppo? Devo davvero analizzare personalmente le autorizzazioni effettive controllando (ricorsivamente) tutti i gruppi di cui l'utente è membro? Sicuramente ci deve essere un'API per questo compito ...

FWIW, sto codifica in Delphi (cioè il codice nativo Win32) utilizzando il TypeLibrary Activeds.dll, le soluzioni in modo da NET-specifici saranno in realtà non aiutano molto a meno che il loro codice sorgente non mi dia indizi su come fare la stessa cosa nel codice nativo. Lo stesso vale per PowerShell.


Prima che qualcuno inizia: so già circa le proprietà MAPI estesa PR_EMS_AB_PUBLIC_DELEGATES e PR_EMS_AB_PUBLIC_DELEGATES_BL_O. Tuttavia, questo non è quello che sto cercando. Queste proprietà si riferiscono al permesso "Invia per conto di" (a.k.a. delegati), non al permesso "Invia come", che è una cosa piuttosto diversa.

+0

@RRUZ: Grazie per il passaggio, ma preferisco mantenere il delphi-tag fuori da questo, soprattutto perché alcune delle persone in grado di rispondere a questo potrebbe persino averlo nella loro lista di ignorare. Mi aspetto che la soluzione finale sia ugualmente applicabile a qualsiasi linguaggio di programmazione che possa utilizzare COM. –

+0

Domanda di follow-up specifica per Delphi qui: http://stackoverflow.com/q/8524507/9784 –

risposta

2

Ecco l'articolo MSDN che spiega - http://msdn.microsoft.com/en-us/library/windows/desktop/ms675580(v=VS.85).aspx. C'è un esempio allegato che mostra come chiamare l'API.

+0

Grazie, sembra molto promettente! Sfortunatamente, non avrò tempo per provarlo fino alla settimana successiva. Tornerò con i risultati (e speriamo un upvote e un accept) non appena ne saprò di più. –

+0

OK, ora mi sono un po 'più avanti (mi ci è voluto un po' per convertire il codice di esempio in Delphi). Sono riuscito a creare un esempio che compila e gira ma, essendo completamente nuovo alla sicurezza di Windows, non posso davvero dire di capire cosa sto facendo o anche cosa esattamente sto verificando con questa procedura ... :( –

+0

Sono sicuro che non andrò in giro a conoscere i concetti sottostanti nel medio-lungo termine, ma speravo in un approccio leggermente più di alto livello per farmi iniziare. Idealmente, voglio passare in un oggetto SID e una maschera di accesso (anche se ho ancora bisogno di capire, cosa dovrei controllare nel mio caso particolare, vale a dire lo specifico "Invia come" di Exchange -right - Sono sicuro che ci deve essere un file di intestazione con costanti per questo, non è lì?) e tornare 'Vero' o' Falso' (Non è necessario verificare l'accesso per qualsiasi utente diverso da quello corrente) –

Problemi correlati