Notes
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
par Robert McMurray
Remarque
Depuis de nombreuses années, les bases de données Microsoft Access sont populaires auprès des développeurs qui utilisent Active Server Pages (ASP) pour les applications à petite échelle. Cependant, les bases de données Microsoft Access ne sont pas conçues pour l’extensibilité. Par conséquent, vous ne devez les utiliser que si les performances ne sont pas un facteur. Il est aussi préférable de ne pas héberger d’applications basées sur des données à grande échelle avec les bases de données Microsoft Access.
Dans IIS 7.0, IIS 7.5 et versions ultérieures, plusieurs modifications de sécurité peuvent affecter la fonction des applications ASP classiques. Par exemple, si vous devez copier une application ASP classique utilisant une base de données Access qui se trouve dans la zone de contenu d’un site web vers un serveur qui utilise IIS 7.0 ou version ultérieure, le message d’erreur suivant peut apparaître :
Erreur du moteur de base de données Microsoft JET « 80004005 »
Erreur non spécifiée.
/example.asp, ligne 100
Même si elle peut survenir pour diverses raisons, cette erreur générique déclenchée par le pilote Access est généralement provoquée par des autorisations incorrectes. Plus précisément, la possibilité d’utiliser des bases de données Microsoft Access est implémentée avec le moteur de base de données Microsoft JET, qui crée différents fichiers temporaires et verrouillés lorsqu’il se connecte à une base de données Access. Les sections suivantes décrivent certaines des raisons pour lesquelles cette erreur peut se produire et comment résoudre le problème.
Utilisation avec les systèmes 64 bits
Malheureusement, il n’existe aucun pilote ODBC 64 bits. Par conséquent, sur les systèmes 64 bits, vous devrez exécuter vos applications en mode 32 bits. Pour cela, utilisez les étapes suivantes :
- Cliquez sur Démarrer, placez le curseur sur Outils d'administration, puis cliquez sur Gestionnaire Internet Information Services (IIS).
- Dans le volet Connexions, cliquez sur Pools d'applications.
- Sélectionnez le pool d'applications de votre application, puis cliquez sur Paramètres avancés dans le volet Actions.
- Dans la boîte de dialogue Paramètres avancés, définissez Activer les applications 32 bits sur True.
- Cliquez sur OK pour fermer la boîte de dialogue Paramètres avancés.
Remarque : l’applet du panneau de configuration 64 bits pour la gestion des connexions ODBC n’affiche pas les pilotes ODBC 32 bits. Pour contourner ce problème, vous devez ouvrir l’applet ODBC 32 bits. Pour cela, utilisez les étapes suivantes :
Cliquez sur Démarrer, puis sur Exécuter ou ouvrez une invite de commandes.
Entrez la commande suivante :
%windir%\syswow64\odbcad32.exe
Appuyez sur la touche Entrée.
Utiliser le contrôle d’accès utilisateur
Vous devez vous assurer de suivre les étapes décrites dans ce document en utilisant un compte doté d’autorisations d’administration complètes. Pour cela, utilisez l’une des deux méthodes suivantes :
- Connectez-vous à votre ordinateur à l’aide du compte administrateur local.
- Si vous êtes connecté à l’aide d’un compte qui dispose d’autorisations d’administration, mais ne correspond pas au compte administrateur local, ouvrez toutes les applications et toutes les sessions d’invite de commandes à l’aide de l’option « Exécuter en tant qu’administrateur ».
Les conditions ci-dessus sont obligatoires, car le composant de sécurité Contrôle de compte d’utilisateur (UAC) inclus dans Windows Vista et Windows Server 2008 empêche l’accès administratif aux paramètres de configuration IIS. Pour plus d’informations sur le contrôle de compte d’utilisateur, consultez la documentation suivante :
Examen initial de résolution des problèmes
Si vous avez activé une forme de suivi ou de débogage, les informations correspondantes peuvent afficher l’erreur qui se produit lorsque la connexion de base de données s’ouvre. Par exemple, les lignes suivantes de code ASP :
strCN = "DRIVER={Microsoft Access Driver (*.mdb)};" & _
"DBQ=C:\Inetpub\wwwroot\App_Data\example.mdb"
Set objCN = Server.CreateObject("ADODB.Connection")
objCN.Open strCN ' <-- Note: ASP Error Occurs Here
strSQL = "SELECT * FROM TableName"
Utiliser le suivi des demandes ayant échoué dans IIS 7.0 et versions antérieures
Si le suivi des demandes ayant échoué dans IIS est configuré pour capturer les journaux de trace à partir d’erreurs HTTP 500, un contenu similaire à celui de l’image suivante s’affiche lorsque vous examinez un journal de suivi après l’échec :
Bien que cette erreur indique qu’un échec s’est produit à l’ouverture de la base de données, il ne fournit aucune information supplémentaire pour vous aider à limiter le problème à une zone spécifique.
Utiliser Process Monitor pour collecter plus d’informations
L’utilitaire Microsoft Windows Sysinternals Process Monitor est une ressource idéale pour suivre les problèmes liés aux autorisations. Pour utiliser Process Monitor et suivre les problèmes IIS en la matière, configurez Process Monitor pour filtrer le suivi uniquement pour les événements créés par les processus W3wp.exe, comme illustré dans l’image suivante :
Une fois que vous avez configuré les paramètres de filtre Process Monitor, configurez Process Monitor de sorte à capturer les événements, puis reproduisez votre erreur. Une fois l’erreur reproduite, examinez le journal de capture Process Monitor pour identifier les erreurs dans la colonne Result des journaux, comme illustré dans l’image suivante :
En analysant les informations des journaux Process Monitor, vous pouvez identifier les problèmes liés aux autorisations. Les exemples suivants permettent d’illustrer le processus.
Autorisations des dossiers temporaires
Si vous utilisez l’utilitaire Process Monitor sur un ordinateur disposant d’une installation par défaut d’IIS sur Windows Server 2008 et Windows Vista SP1, vous pouvez rencontrer une erreur semblable à la suivante lorsqu’ASP se connecte à une base de données Access :
Nom de processus : w3wp.exe
Opération : CreateFile
Path (Chemin d’accès) : C:\Windows\Temp\JET5150.tmp
Résultat : ACCÈS REFUSÉ
Détail :
Accès souhaité : | Lecture/Écriture génériques, Suppression |
---|---|
Disposition : | Create |
Options : | Sans alerte d’E/S synchrone, Fichier sans répertoire, Accès aléatoire, Suppression à la fermeture, Ouverture sans rappel |
Attributs : | NT |
ShareMode : | Aucun |
AllocationSize : | 0 |
Impersonating : | NT AUTHORITY\IUSR |
Cette erreur indique que le moteur de base de données JET ne peut pas créer un fichier temporaire en tant qu’identité impersonnée du pool d’applications dans le répertoire temporaire Windows par défaut. Cela se produit lorsque vous utilisez les paramètres par défaut pour la version de mise en production d’IIS sur Windows Server 2008 et Windows Vista SP1, avec laquelle IIS ne charge pas le profil utilisateur pour le profil d’identité du pool d’applications par défaut. Pour résoudre ce problème, vous pouvez modifier les autorisations sur le répertoire %SystemDrive%\Windows\Temp de sorte à valider l’autorisation de lecture/écriture pour l’utilisateur impersonné.
Si vous utilisez la version d’origine de Windows Vista, vous pouvez rencontrer une erreur semblable à la suivante lorsqu’ASP se connecte à une base de données Access :
Nom de processus : w3wp.exe
Opération : CreateFile
Chemin : Résultat : C:\Windows\ServiceProfiles\NetworkService\AppData\Local\Temp
ACCÈS REFUSÉ
Détail :
Accès souhaité : | Lire les attributs |
---|---|
Disposition : | En cours |
Options : | Point d’analyse ouvert |
Attributs : | n/a |
ShareMode : | Lecture, écriture, suppression |
AllocationSize : | n/a |
Impersonating : | NT AUTHORITY\IUSR |
Cette erreur indique que le moteur de base de données JET ne peut pas accéder au répertoire temporaire du profil utilisateur du service réseau qui utilise l’identité impersonnée du pool d’applications. Dans cet exemple particulier, l’identité du pool d’applications est configurée pour utiliser le compte de service réseau et IIS est configuré pour charger le profil utilisateur pour l’identité impersonnée du pool d’applications. L’erreur se produit, car l’identité impersonnée du pool d’applications ne peut pas accéder au dossier temporaire du compte de service réseau. Pour résoudre ce problème spécifique, vous pouvez modifier les autorisations sur le répertoire %SystemDrive%\Windows\ServiceProfiles\NetworkService\AppData\Local\Temp de sorte à valider l’autorisation de lecture/écriture pour l’utilisateur impersonné. Vous pouvez aussi configurer IIS de sorte à ne pas charger le profil utilisateur, ce qui modifie le dossier temporaire que le moteur de base de données JET va utiliser.
Le paramètre de configuration qui détermine si le profil utilisateur est chargé pour l’identité du pool d’applications est loadUserProfile, lequel est défini par défaut sur false. Vous pouvez configurer ce paramètre en modifiant la valeur de l’attribut Charger le profil utilisateur dans la boîte de dialogue Paramètres avancés d’un pool d’applications.
Vous pouvez également configurer ce paramètre à l’aide de l’outil en ligne de commande AppCmd.exe avec la syntaxe suivante :
appcmd.exe set config -section:system.applicationHost/applicationPools /[name='DefaultAppPool'].processModel.loadUserProfile:"False" /commit:apphost
Autorisations des dossiers de contenu
Lorsque vous déployez une application ASP classique qui utilise une base de données Access, cette erreur peut apparaître, car le fichier de verrouillage de la base de données Access ne peut pas avoir été créé. Pour plus d’informations sur ce scénario, reportez-vous aux bases de données Access conservées dans des fichiers qui utilisent une extension de nom de fichier .MDB. Lorsque vous essayez de compléter la base de données ou de mettre à jour les données, le moteur de base de données Microsoft JET tente de créer un fichier de verrouillage avec lequel il utilise une extension de nom de fichier .LDB. Si la base de données Access est stockée dans la zone de contenu de votre site web, le moteur de base de données JET ne dispose pas par défaut des autorisations d’accès suffisantes pour mettre à jour la base de données. Le message d’erreur suivant s’affiche dans un navigateur web :
**Erreur du moteur de base de données Microsoft JET « 80004005 »
L’opération doit utiliser une requête pouvant être mise à jour.
/example.asp, ligne 100**
Si vous utilisiez l’utilitaire Process Monitor lorsque vous avez reproduit l’erreur, les informations suivantes concernant l’échec sont consignées :
Nom de processus : w3wp.exe
Opération : CreateFile
Chemin : Résultat : C:\Inetpub\wwwroot\App\_Data\example.ldb
ACCÈS REFUSÉ
Détail :
Accès souhaité : | Lecture/Écriture générique |
---|---|
Disposition : | OpenIf |
Options : | Sans alerte d’E/S synchrone, Fichier sans répertoire, Accès aléatoire, Ouverture sans rappel |
Attributs : | N |
ShareMode : | Lire, Écrire |
AllocationSize : | 0 |
Impersonating : | NT AUTHORITY\IUSR |
Cette erreur répertorie clairement le fichier de verrouillage comme cause de l’échec. Pour résoudre le problème, vous pouvez accorder l’autorisation de lecture/écriture de l’identité impersonée du pool d’applications dans le dossier où se trouve la base de données Access. Toutefois, cela pose un risque de sécurité pour votre site web. Une meilleure solution consisterait à déplacer la base de données Access hors de la zone de contenu de votre site web vers un dossier dans lequel l’identité impersonée du pool d’applications dispose d’une autorisation de lecture/écriture, puis à créer un nom de source de données système (DSN) qui pointe vers l’emplacement de la base de données. Votre code ASP référencerait alors le DSN système dans la chaîne de connexion plutôt que dans le chemin physique de la base de données, ce qui est également préférable en termes de sécurité. Si vous devez stocker la base de données dans la zone de contenu, vous devez toujours stocker la base de données dans un dossier bloqué par défaut par les fonctionnalités de filtrage des requêtes IIS, comme le dossier App_Data.
Informations supplémentaires
Pour plus d’informations sur loadUserProfile et les autres attributs de pool d’applications, consultez les pages suivantes du support Microsoft et les sites web IIS.net :