2009-05-18 5 views
9


SqlException: Échec de la connexion pour l'utilisateur « NT AUTHORITY NETWORK SERVICE

Quand je lance l'application web via VS 2008, l'application peut se connecter sur le serveur Sql et vérifier les informations d'identification (nom d'utilisateur et mot de passe) saisis par la utilisateur, mais quand je passe en revue à cette application via IIS 7 et essayer de postback nom d'utilisateur et mot de passe, l'application signale une exception:

System.Data.SqlClient.SqlException: Échec de la connexion pour l'utilisateur « NT AUTHORITY \ RÉSEAU '

  • Avec IIS 7 chaque processus exécute sous le compte Service réseau ... alors quels droits dois-je attribuer à ce compte pour l'application de pouvoir « contact » Sql server?


Thanx


EDIT:

Bonjour,


Cela fonctionne maintenant, même si je ne comprends pas pourquoi le compte machine avait besoin de ces droits. Je comprends que le compte machine a besoin de droits pour pouvoir "parler" avec un programme spécifique (serveur Sql), mais pourquoi a-t-il besoin de droits pour accéder à la base de données et à ses tables? N'est-ce pas au compte indiqué dans la chaîne de connexion

<add name="MyConnection" connectionString="data source=localhost; integrated security=sspi; initial catalog=aspnetdb;" /> 

d'avoir des droits d'accès appropriés à la base de données et à ses tables?

+2

SourceC, votre chaîne de connexion n'utilise une combinaison nom d'utilisateur/mot de passe spécifique, par conséquent, il utilise sécurité intégrée de Windows. Lorsque vous utilisez Integrated Security dans la chaîne de connexion, l'application se connecte à la base de données en utilisant le compte sous lequel s'exécute le pool d'applications Web. Si vous souhaitez utiliser l'identité de l'appelant, alors vous devez lire sur l'usurpation d'identité ASP.NET - Je ne le recommande pas, mais il existe différents inconvénients de l'utilisation de cette approche. Vous pouvez utiliser une combinaison de mot de passe de nom d'utilisateur dans la chaîne de connexion en fonction de vos besoins. – RichardOD

Répondre

19

Vous devez créer un compte réellement dans SQL Server pour le compte de service réseau. Ensuite, vous lui accorderez l'accès à votre base de données, les autorisations spécifiques que vous accordez au compte dépendent de la nature des tâches que votre base de données doit faire.

Vous pouvez faire tout cela dans SSMS via la section « Sécurité », faites un clic droit sur « Logins » et sélectionnez ajouter. Vous allez ajouter un compte Windows, vous pouvez alors rechercher et valider le nom "SERVICE RÉSEAU". Passez ensuite à la section "Mappage des utilisateurs" et accordez l'autorisation d'afficher votre base de données. Les autorisations comme je l'ai dit sont à vous, ou vous pouvez lui attribuer des autorisations de propriétaire pour un contrôle total.

Après cela, tout ira bien. Je déconseille de donner à l'application plus d'autorisations que nécessaire!

+0

merci, cela m'a beaucoup aidé. :) –

3

Je recommande la création d'un compte de service et que votre processus IIS 7 exécuté en tant que compte. Assurez-vous que le compte a un accès approprié à la base de données (si elle lit juste DB-REader) (si elle lit et met à jour DB-Reader et DB-Writer).

9

Personnellement, j'utiliserais l'application Web sous un compte de service personnalisé. Si vous voulez vraiment l'exécuter sous Service réseau, see this MSDN document.

8

Comme vous spécifiez « sécurité intégrée = SSPI » dans la chaîne de connexion que je suppose que vous vous attendez usurper l'identité. Pour cela, vous devez: 1. activer l'authentification intégrée dans IIS 2.allumer les fenêtres auth en asp.net: 3. tour sur imerposation en asp.net:

considèrent également que cela ne suffit pas si votre serveur web et la machine SQL Server sont des machines différentes. Ensuite, le compte de vos utilisateurs devra être approuvé pour la délégation. C'est une option spéciale dans AD. Donc, vous avez déjà dit qu'il est préférable d'avoir un compte séparé pour les connexions SQLSRV. J'espère que cela aide.

+0

Donc quand je me connecte (en tant qu'utilisateur U) Sql serveur via Sql serveur de gestion de studio, le studio de gestion de serveur (ou un autre service) assume l'identité de l'utilisateur U? Si oui, alors je suppose que le serveur Sql exige non seulement que le processus P1 (qui essaie de "parler" à ce serveur Sql) fournisse les informations d'identification appropriées (nom d'utilisateur U1 et mot de passe), mais exige également que P1 s'exécute aussi utilisateur U1? Mais alors pourquoi le serveur Sql demande-t-il même P1 pour fournir des informations d'identification appropriées? Pourquoi ne vérifie-t-il pas si P1 s'exécute comme U1, et si oui, laissez P1 "in" ?! – SourceC

+0

Excusez-moi, mais assurez-vous de comprendre ce qu'est l'usurpation d'identité et la délégation. Vérifiez ceci: http://msdn.microsoft.com/en-us/library/ms998351.aspx http://www.infosysblogs.com/microsoft/2009/02/impersonation_and_delegation_t.html – Shrike

2

J'ai rencontré la même erreur avec une nouvelle configuration IIS. J'ai utilisé "sécurité intégrée = faux; User Id = sa; Mot de passe = votre mot de passe" et tout a bien fonctionné.

+0

L'utilisateur sa doit être réservé pour les tâches administratives. – GnomeCubed

1

Cette erreur se produit lorsque vous avez configuré votre application avec IIS et que IIS passe à SQL Server et tente de se connecter avec des informations d'identification qui ne disposent pas des autorisations appropriées. Cette erreur peut également se produire lorsque la réplication ou la mise en miroir est configurée.

Je vais passer en revue une solution qui fonctionne toujours et qui est très simple.

Aller à SQL Server >> Sécurité >> Logins et clic droit sur NT AUTHORITY \ NETWORK SERVICE et sélectionnez Propriétés

Dans l'écran récemment ouvert des Propriétés de la connexion, allez dans l'onglet « User Mapping ». Ensuite, dans l'onglet "Mappage des utilisateurs", sélectionnez la base de données souhaitée, en particulier la base de données pour laquelle ce message d'erreur est affiché. Sur l'écran inférieur, vérifiez le rôle db_owner. Cliquez sur OK.

0

J'ai rencontré ce problème dans un projet SharePoint. La sécurité intégrée était activée et la base de données était déjà configurée pour permettre l'accès par l'utilisateur de l'App Pool.

Le problème était que l'usurpation d'identité a été retournée sur alors qu'elle devait être désactivée. This answer m'a conduit dans la bonne direction:

WindowsImpersonationContext noImpersonateContext = null; 

try 
{ 
    noImpersonateContext = WindowsIdentity.Impersonate(IntPtr.Zero); 
    using (SqlConnection conn = CreateConnection()) 
    { 
     // database calls... 
    } 
} 
finally 
{ 
    if (noImpersonateContext != null) noImpersonateContext.Undo(); 
} 
Questions connexes