2010-06-07 17 views
7

Sommario: una delle nostre applicazioni Web richiede l'accesso in scrittura a C:\Windows\Temp. Tuttavia, indipendentemente dal grado di indebolimento dell'autorizzazione NTFS, procmon mostra ACCESS DENIED.IIS 7.5, ASP.NET, rappresentazione e accesso a C: Windows Temp

Sfondo (che potrebbe o non potrebbe essere rilevante per il problema): Stiamo usando OLE DB per accedere a un database MS Access (che si trova al di fuori di C: \ Windows \ Temp). Sfortunatamente, questo driver OLEDB richiede l'accesso in scrittura alla directory TEMP del profilo utente (che risulta essere C: \ Windows \ Temp quando è in esecuzione in IIS 7.5), altrimenti viene generata la temuta "Errore non specificato" OleDbException. Vedi KB 926939 per i dettagli. Ho seguito i passaggi nell'articolo della Knowledge Base, ma non aiuta.

dettagli:

Questa è l'uscita di icacls C:\Windows\Temp. A scopo di debug, ho fornito le autorizzazioni complete a Everyone.

C:\Windows\Temp NT AUTHORITY\SYSTEM:(OI)(CI)(F) 
       CREATOR OWNER:(OI)(CI)(IO)(F) 
       BUILTIN\IIS_IUSRS:(OI)(CI)(S,RD) 
       BUILTIN\Users:(CI)(S,WD,AD,X) 
       BUILTIN\Administrators:(OI)(CI)(F) 
       Everyone:(OI)(CI)(F) 

Tuttavia, questo è lo screenshot di ProcMon:

procmon screenshot

Desired Access: Generic Read/Write, Delete 
Disposition: Create 
Options:  Synchronous IO Non-Alert, Non-Directory File, Random Access, Delete On Close, Open No Recall 
Attributes:  NT 
ShareMode:  None 
AllocationSize: 0 
Impersonating: MYDOMAIN\myuser 

PS: Quando si accede come MYDOMAIN\myuser, posso creare i file in C:\Windows\Temp utilizzando Windows Explorer senza problemi.

EDIT: parti rilevanti del web.config:

<authentication mode="Windows" /> 
<identity impersonate="true" /> 
<authorization> 
    <deny users="?" /> 
    <allow users="*" /> 
</authorization> 

autenticazione sembra funzionare, vale a dire, System.Security.Principal.WindowsIdentity.GetCurrent().Name (che è indicata sulla mia pagina di errore personalizzata) restituisce MYDOMAIN\myuser.

+0

PS: Ho anche considerato questo distacco a serverfault, invece, ma la mia ipotesi è che si tratta di un problema con il modo in ASP.NET gestisce la rappresentazione piuttosto che un Windows problema di configurazione. – Heinzi

+0

Quali sono i valori per '' e '' in 'Web.config' e IIS è configurato per consentire l'accesso anonimo (non sono sicuro che sia ancora applicabile in IIS7)? – scherand

+0

@scherand: ho aggiornato la mia domanda. IIS7.5 sembra utilizzare le impostazioni .net w.r.t. accesso anonimo. – Heinzi

risposta

3

Hai provato i passaggi riportati a questo: loadUserProfile and IIS 7 temporary directory failures

+0

Beh, questo è esattamente quello che ho fatto (concedere le autorizzazioni). Sono persino arrivato a concedere autorizzazioni * complete *. – Heinzi

+0

Se è lì che la directory temp è, hai * non * è imposta per LoadUserProfile –

+0

@AndrewBarber: L'articolo dice: "* La risposta è piuttosto semplice: spegnere LoadUserProfile, ** o ** ACL directory temp per consentire scrive. * "Notare" * o * ". Quindi, secondo l'articolo, basta impostare gli ACL sulla directory temporanea * dovrebbe * risolvere il problema, ma non è così. Ma sì, la soluzione alternativa usando loadUserProfile è utile, quindi +1 alla risposta (non c'è ancora una "risposta accettata", poiché non risponde alla domanda originale - "perché l'accesso in scrittura a C: \ Windows \ Temp non funziona anche sebbene siano fornite le autorizzazioni complete "). :-) – Heinzi

Problemi correlati