2012-05-09 16 views
6

Recentemente ho ridisegnato la sicurezza su un nostro file server, segnando la maggior parte di ciò che era il controllo completo da modificare. Ora i miei sviluppatori mi dicono che ogni volta che usano GENERIC_ALL per aprire un file (con CreateFile() per esempio), ricevono un messaggio di accesso negato.GENERIC_ALL e cartelle/file ACL? Che cosa fa veramente GENERIC_ALL?

Dopo la ricerca, nulla sembrava indicare che GENERIC_ALL fosse più di GENERIC_EXECUTE + GENERIC_WRITE + GENERIC_READ; tuttavia, questo non sembra essere il caso, dal momento che uno sviluppatore è stato in grado di aggiungere i tre valori costanti e usarlo a CreateFile().

Quindi, chiedo ... cosa fa davvero lo GENERIC_ALL?

Grazie,

Matt

+0

Come un dannato fantasma nel miracolo della macchina, ho pensato a questo oggi quando mi sono imbattuto in un problema di timeout con TortoiseHg che non era in grado di creare file sulla condivisione di un utente. Chiunque abbia appena aggiornato il post, te ne devo uno. – mbrownnyc

risposta

4

I GENERIC_ALL diritti di accesso includono ogni eventuale diritto di accesso, compresa cose come WRITE_DAC (per modificare le autorizzazioni) e WRITE_OWNER (per cambiare proprietario). La pagina File Security and Access Rights mostra come i diritti di accesso GENERIC_* si associano a diritti di accesso specifici per i file. La pagina File Access Rights Constants mostra tutti i possibili diritti di accesso per i file (che presumibilmente sarebbero tutti richiesti quando viene utilizzato GENERIC_ALL).

Dovresti incoraggiare i tuoi sviluppatori a richiedere solo il livello di accesso di cui hanno effettivamente bisogno. Raramente, ad esempio, un file aperto sia per GENERIC_EXECUTE sia per GENERIC_WRITE allo stesso tempo.

3

GENERIC_ALL significa "ogni possibile livello di accesso" (per i file, questo ha il nome FILE_ALL_ACCESS). Poiché hai rimosso il controllo completo, i tentativi di apertura per GENERIC_ALL non riusciranno con Accesso negato perché (ad esempio) WRITE_DAC non è più concesso.