ApplicationPoolIdentity IIS 7.5 vers SQL Server 2008 R2 ne fonctionne pas


11

J'ai un petit script de test ASP.NET qui ouvre une connexion à une base de données SQL Server sur une autre machine du domaine. Cela ne fonctionne pas dans tous les cas.

Installer:

IIS 7.5 sous W2K8R2 essayant de se connecter à une instance distante de SQL Server 2008 R2. Toutes les machines sont dans le même domaine.

À l'aide de ApplicationPoolIdentity pour le site Web, il ne parvient pas à se connecter à SQL Server avec les éléments suivants:

La connexion a échoué pour l'utilisateur «NT AUTHORITY \ ANONYMOUS LOGON». Description: une exception non gérée s'est produite lors de l'exécution de la demande Web en cours. Veuillez consulter la trace de la pile pour plus d'informations sur l'erreur et son origine dans le code.

Détails de l'exception: System.Data.SqlClient.SqlException: la connexion a échoué pour l'utilisateur «NT AUTHORITY \ ANONYMOUS LOGON».

Cependant, si je bascule l'identité du modèle de processus vers SERVICE RÉSEAU ou mon compte de domaine, la connexion à la base de données réussit.

J'ai accordé l'accès \ $ dans SQL Server.

Je ne fais aucune sorte d'authentification sur le site Web, c'est juste un simple script pour ouvrir une connexion à une base de données pour s'assurer que cela fonctionne.

J'ai l'authentification anonyme activée et configurée pour utiliser l'identité du pool d'applications.

Comment faire pour que ça marche? Pourquoi ApplicationPoolIdentity essaie-t-il d'utiliser ANONYMOUS LOGON? Mieux encore, comment puis-je empêcher l'utilisation de la connexion anonyme?


1
Vous pouvez toujours simplement définir l'identité AppPool en tant que SERVICE RÉSEAU.
JohnThePro

Réponses:


4

J'avais aussi le même problème. Conformément à cette page , ApplicationPoolIdentity est censé accéder aux ressources réseau en tant que compte d'ordinateur (DOMAIN \ COMPUTERNAME $), mais il utilisait NT AUTHORITY \ ANONYMOUS LOGON pour accéder à SQL Server à la place.

J'ai pu utiliser ce correctif pour que ApplicationPoolIdentity fonctionne comme le doc le dit. Ce correctif ne décrit pas spécifiquement une solution pour accéder aux ressources réseau comme NT AUTHORITY \ ANONYMOUS LOGON, mais il est lié à la modification du mot de passe de l'ordinateur.

Ce thread stackoverflow m'a aidé à trouver cette solution:

Autres conseils utiles pour déboguer l'identité ASP.NET et l'identité SQL

Étant donné que l'authentification intégrée SQL est liée à l'identité du thread, il est utile de pouvoir afficher votre identité d'utilisateur, l'identité du thread (qui change en fonction de l'emprunt d'identité) et la connexion au serveur SQL. Cet extrait ASPX affiche les trois:

<%@ Import Namespace="System.Security.Principal" %>

<div>ASP.NET Request User identity: <%= User.Identity.Name %></div>
<div>Current thread/process WindowsIdentity: <%= WindowsIdentity.GetCurrent(false).Name %></div>
<asp:SqlDataSource ID="CurrentUserData" runat="server" ConnectionString="<%$ ConnectionStrings:ConnID %>"
           SelectCommand="select SYSTEM_USER" />
<asp:DetailsView DataSourceID="CurrentUserData" runat="server" />

2

J'ai eu exactement le même problème. J'ai arraché mes cheveux pendant plusieurs heures et j'ai enfin redémarré la machine. Le problème a disparu! Notez que le redémarrage d'IIS via iisreset N'A PAS résolu le problème. Il n'a disparu que lorsque j'ai redémarré le serveur.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.