SQL Server et l'authentification Windows dans IIS7

J'essaie d'get un site Web ASP.NET fonctionnant sous Vista (IIS7), en utilisant SQL Server et l'authentification Windows. Peu importe ce que je fais, quand je me connecte à la database, j'obtiens l'exception:

     SqlException n'a pas été manipulé
     La connection a échoué pour l'user 'MyDomain \ MachineName $'.

Peu importe les parameters que j'applique, je n'arrive pas à faire passer IIS7 par mes identifiants de connection Windows.

Détails supplémentaires:

  • Le server SQL et ma machine locale sont tous les deux sur ActiveDirectory
  • Vista Enterprise, IIS7
  • SQL Server 2005
  • Authentification anonyme désactivée, authentification Windows activée
  • L'usurpation on / off ne fait aucune différence
  • Toutes les identités (NetworkService, LocalSystem, etc.) donnent le même résultat
  • Les pipelines classiques et embeddeds donnent le même résultat

Aidez-moi!

L'usurpation on / off fait toute la différence, lorsqu'elle est correctement configurée. Ce que vous voulez est appelé 'délégation contrainte' et vous devez configurer IIS et ASP pour cela:

  • Comment: utiliser la transition de protocole et la délégation contrainte dans ASP.NET 2.0
  • Configurer l'authentification d'emprunt d'identité ASP.NET (IIS 7)
  • Configuration des servers pour la délégation

Par défaut, le server IIS n'est pas autorisé à vous impersonate vers le server SQL. Il y a un article MSDN sur la façon de le configurer. Le process de configuration est complexe et sujet aux erreurs.

Si votre production ISS et SQL Server s'exécutent sur des servers différents, vous aurez besoin d'un administrateur de domaine pour configurer l'approbation de l'emprunt d'identité entre les deux servers. C'est typiquement un non-aller dans une grande organisation.

En plus de ne pas être déployé par les administrateurs normaux, l'emprunt d'identité empêche également les users de partager leurs connections dans le pool de connections SQL. Cela entraîne une pénalité de performance très perceptible même pour les sites Web de petite taille (5 users et plus).

Avez-vous essayé de créer un nouveau count d'user pour votre application, lui accorder les droits appropriés sur le server Sql, puis définir le pool d'applications à exécuter sous ce nouveau count? C'est ce que je fais habituellement, et cela fonctionne. Je n'exécute pas mon application sous NetworkService, LocalSystem ou d'autres counts embeddeds.

Votre string de connection contient-elle Integrated Security=SSPI ?

Avez-vous également changé le context d'asp.net pour devenir un user de domaine?

Voici un article MSDN sur ce sujet

http://msdn.microsoft.com/en-us/library/2xzyzb0f.aspx