2012-03-08 6 views
1

J'ai IIS7.5 avec deux sites Web, et j'ai une base de données Access sur un serveur sur notre réseau.Authentification MS Access IIS7.5

Le premier site Web a une autorisation anonyme, en utilisant un compte réseau spécifique (disons 'jim.smith').

Le deuxième site Web a une authentification Windows.

J'ai écrit un certain ASP pour utiliser une connexion sans DSN à la base de données Access, et j'utilise le même code dans les deux sites Web. Lorsque vous êtes connecté à un ordinateur avec le même compte réseau que celui utilisé pour le premier paramètre anonyme du site Web ('jim.smith') - lors de la visualisation dans un navigateur, le premier site Web a accès à la base de données, le second site Web ne le fait pas. Le message d'erreur est: 80004005 Le moteur de base de données Microsoft Jet ne peut pas ouvrir le fichier '...'. Il est déjà ouvert exclusivement par un autre utilisateur, ou vous avez besoin d'une autorisation pour afficher ses données.

Il n'est certainement pas ouvert par un autre utilisateur. Par conséquent, le premier site Web est accessible par l'utilisateur réseau 'jim.smith' via le paramètre anonyme (0).

Le deuxième site Web est accessible par l'utilisateur réseau 'jim.smith' via Windows auth.

Pourquoi l'accès à la base de données fonctionnerait-il à partir du site Web un, et non du site Web deux?

Est-ce que quelqu'un sait comment faire fonctionner Windows auth comme le paramètre anonyme de sorte que j'ai accès à la base de données du site Web deux ..?

À la votre!

Steve

Edit: Tout le monde a tous les droits sur le dossier dans lequel se trouve la base de données.

+0

Avez-vous regardé les autorisations sur le dossier? Access crée un fichier de verrouillage (ldb) et si les utilisateurs n'ont pas d'autorisations sur le dossier, ils ne peuvent pas accéder au fichier de verrouillage et ne peuvent donc pas utiliser la base de données. – Fionnuala

+0

Oui, désolé, aurait dit cela, tout le monde a tous les droits sur le dossier. Mais comme je l'ai dit, il devrait être le même utilisateur (jim.smith) étant utilisé à partir des deux sites de toute façon, donc le même niveau d'autorisations * devrait * s'appliquer. La différence est qu'un site Web est anonyme (en utilisant jim.le compte de smith) et l'un est windows auth (connecté en tant que jim.smith). –

Répondre

0

Il me semble que vous devez activer l'emprunt d'identité pour que l'utilisateur entrant soit utilisé pour accéder à la base de données. Sinon, l'utilisateur du pool d'applications est utilisé et cela ne généralement même pas droit sur le serveur lui-même (le pool d'applications Identity)

Lors de l'utilisation « Pipeline intégré » sur IIS sur le serveur, et si votre application ne se contente pas d'usurper l'identité de l'utilisateur demandeur dans les étapes 'BeginRequest' et 'AuthenticateRequest' (les seules étapes où l'emprunt d'identité n'est pas possible en mode intégré), mais nécessite une emprunt d'identité dans d'autres zones de l'application. - Erreur interne du serveur) en ajoutant ce qui suit au fichier web.config de votre application:

<system.webServer> 
     <validation validateIntegratedModeConfiguration="false"/> 
</system.webServer> 

Voir: http://allen-conway-dotnet.blogspot.com/2010/11/how-to-use-impersonation-in-aspnet.html

+0

Merci pour la réponse Schwarzie2478, j'ai essayé d'ajouter cette ligne à mon fichier web.config mais cela ne fonctionne toujours pas. Pour l'anecdote, j'utilise Classic ASP pas .NET. –

+0

Oups, force de l'habitude d'assumer ASP.NET – Schwarzie2478