L'erreur "Login échoué pour l'utilisateur 'NT autoritéIUSR' " dans ASP.NET et SQL Server 2008
My ASP.NET v3.5 application web lance l'exception suivante quand il tente d'ouvrir une connexion à une base de données SQL Server 2008:
Système.Données.SqlClient.SqlException: Ne peut pas ouvrir la base de données "MyDbName" demandée par la connexion. Connexion échouer. Échec de connexion pour l'utilisateur ' NT AUTHORITYIUSR'.
le truc c'est que j'ai ajouté NT AUTHORITYIUSR
à la liste des logins du serveur, et à la base de données liste des utilisateurs. Pour le serveur, j'ai accordé à l'utilisateur le rôle Public, et pour la base de données j'ai accordé les permissions db_datareader
.
j'ai également accordé la même chose pour NT AUTHORITYNETWORK SERVICE
, qui est l'identité sous laquelle le pool de demandes est exécuté.
l'application web est hébergée par IIS7, si cela fait une différence. Le problème se résorbe lorsque le DB et L'IIS sont sur la même machine physique aussi bien.
7 réponses
le truc ici est que NT AUTHORITY\NETWORK SERVICE
apparaît réellement dans la base de données comme DOMAINNAME\MACHINENAME$
(notez le signe $
!). C'est-à-dire que lorsque vous passez la frontière de la machine de votre serveur web au serveur SQL, le serveur SQL voit le compte de la machine si vous utilisez les comptes NETWORK SERVICE
ou LOCAL SYSTEM
. Si vous utilisez un autre compte non-domaine, SQL Server ne recevra pas vos informations d'identification.
je suis un peu perplexe par votre message d'erreur. Pour dire la vérité, je ne pense pas que quand le DB est sur une autre boîte, vous verrez autre chose que Login Failed for NT AUTHORITY\ANONYMOUS LOGON
.
IUSR
est utilisé pour les sites web anonymes, et ne peut pas passer le fil à SQL Server. Tu peux trouver un moyen pour que ça marche si tu fais tout sur la même machine, mais je ne le saurais jamais parce que je ne le ferais jamais de cette façon... ;- )
je suggère de créer un compte séparé (de préférence un domaine) et de le spécifier dans la chaîne de connexion (habituellement dans le web.config) Ensuite, vous pouvez limiter les permissions sur le serveur web ce que ce compte peut et ne peut pas faire. Ensuite, vous pouvez accorder à ce compte les permissions requises dans SQL server.
j'avais eu le même problème et j'ai résolu cela en changeant le pool d'application.
au cas où il aide quelqu'un, sur le web.config j'ai ajouté
la solution simple est de vérifier votre web.le fichier de configuration et assurez-vous que l'un de ces fait partie de la db de la chaîne de connexion:
Connexion de Confiance=false
ou
Integrated Security=True
ce problème s'affiche lorsque vous restaurez une nouvelle base de données sur votre dernière base de données.
pour résoudre cela, vous devez aller à sqlserver, puis la sécurité et puis régler votre apppool à nouveau.