2010-06-07 34 views
7

Résumé: Une de nos applications Web nécessite un accès en écriture à C:\Windows\Temp. Cependant, peu importe combien je affaiblis la permission NTFS, procmon montre ACCESS DENIED.IIS 7.5, ASP.NET, emprunt d'identité et accès à C: Windows Temp

Contexte (qui pourrait ou non être pertinents pour le problème): Nous utilisons OLEDB pour accéder à une base de données MS Access (qui est situé en dehors de C: \ Windows \ Temp). Malheureusement, ce pilote OLEDB nécessite un accès en écriture au répertoire TEMP du profil utilisateur (qui se trouve être C: \ Windows \ Temp lorsqu'il est exécuté sous IIS 7.5), sinon l'erreur OleDbException redoutée "Unspecified Error" est levée. Voir KB 926939 pour plus de détails. J'ai suivi les étapes de l'article de la base de connaissances, mais cela n'aide pas.

Détails:

Ceci est la sortie de icacls C:\Windows\Temp. À des fins de débogage, j'ai donné des autorisations complètes à 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) 

Cependant, ceci est la capture d'écran de 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: Une fois connecté comme MYDOMAIN\myuser, je peux créer des fichiers dans C:\Windows\Temp en utilisant Windows Explorer sans aucun problème.

EDIT: Les parties pertinentes du web.config:

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

authentification semble fonctionner, à savoir System.Security.Principal.WindowsIdentity.GetCurrent().Name (qui figure sur ma page d'erreur personnalisée) retourne MYDOMAIN\myuser.

+0

PS: Je considérais aussi ce détachement à la place serverfault, mais je pense que ce serais un problème avec la façon dont ASP.NET gère l'usurpation d'identité plutôt que Windows problème de configuration. – Heinzi

+0

Quelles sont les valeurs de '' et '' dans 'Web.config' et IIS est-il configuré pour autoriser l'accès anonyme (pas sûr si cela est toujours applicable dans IIS7)? – scherand

+0

@scherand: J'ai mis à jour ma question. IIS7.5 semble utiliser les paramètres .net w.r.t. accès anonyme. – Heinzi

Répondre

3

Avez-vous essayé suivant les étapes de ceci: loadUserProfile and IIS 7 temporary directory failures

+0

Eh bien, c'est exactement ce que j'ai fait (accorder des autorisations). Je suis même allé jusqu'à accorder des permissions * complètes *. – Heinzi

+0

Si c'est là où est le répertoire temp, vous ne l'avez * pas * défini sur loadUserProfile –

+0

@AndrewBarber: L'article dit: "* La réponse est assez simple: désactiver loadUserProfile, ** ou ** ACL le répertoire temp pour permettre écrit. * "Notez le" * ou * ". Ainsi, selon l'article, il suffit de définir les listes de contrôle d'accès sur le répertoire temporaire * devrait * résoudre le problème, mais ce n'est pas le cas. Mais oui, la solution de contournement utilisant loadUserProfile est utile, donc +1 à la réponse (pas de "réponse acceptée" pour le moment, car elle ne répond pas à la question initiale - "pourquoi l'accès en écriture à C: \ Windows \ Temp ne fonctionne pas? bien que des permissions complètes soient données "). :-) – Heinzi