Échec de la connexion pour l'utilisateur ' DOMAINMACHINENAME$'

je sais que c'est presque dupliqué de: L'erreur "Login échoué pour l'utilisateur' NT autoritéIUSR '"en ASP.NET et SQL Server 2008 et Login échoué pour l'utilisateur 'nom d'utilisateur' - système.Données.SqlClient.SqlException avec LINQ dans la bibliothèque de classe / projet externe mais certaines choses ne s'additionnent pas par rapport à d'autres applications sur mon serveur et je ne sais pas pourquoi.

boîtes utilisées:

Web "De La Boîte 1519140920"
SQL Box

SQL Test Case

Ma Demande:

j'ai aASP.NET Application Web, qui fait référence à une bibliothèque de classe qui utilise LINQ-to-SQL. Chaîne de connexion configurée correctement dans la bibliothèque de classe. Comme Login échoué pour l'utilisateur 'nom d'utilisateur' - système.Données.SqlClient.SqlException avec LINQ en externe de projet / bibliothèque de classes j'ai aussi ajouté cette chaîne de connexion à L'Application Web.

la chaîne de connexion utilise des justificatifs SQL comme so (dans l'application web et la bibliothèque de classe):

 <add name="Namespace.My.MySettings.ConnectionStringProduction"
        connectionString="Data Source=(SQL Test Box);Initial Catalog=(db name);Persist Security Info=True;User ID=ID;Password=Password"
        providerName="System.Data.SqlClient" />

cette connexion a confirmé qu'elle fonctionnait en l'ajoutant à l'Explorateur de serveur. C'est la chaîne de connexion de mon .fichier dbml.

Le problème:

j'obtiens l'erreur suivante:

System.Data.SqlClient.SqlException: Login failed for user 'DOMAINMACHINENAME$'.

Maintenant, se référant à ce L'erreur "de connexion a échoué pour l'utilisateur 'Autorité NTIUSR' "dans ASP.NET et SQL Server 2008 il dit que c'est vraiment le service de réseau local et l'utilisation de tout autre nom non-domaine ne fonctionnera pas.

mais je suis confus parce que j'ai coché à la fois SQL Box et SQL Test Box SQL Management Studio et tous les deux ont NT AUTHORITY/NETWORK SERVICE sous Sécurité - > Logins, au niveau de la base de données, qui n'est pas listée sous Sécurité - > utilisateurs, mais au niveau de la base de données Sécurité - > Utilisateurs j'ai l'utilisateur affiché dans la chaîne de connexion.

au niveau NTFS sur le serveur web, les permissions ont le service réseau a le contrôle total.

la raison pour laquelle je suis confus est parce que j'ai beaucoup d'autres applications web sur mon serveur Web, que les bases de données de référence à la fois sur SQL Box et SQL Test Box, et ils fonctionnent tous. Mais je ne peux pas trouver une différence entre eux et mon application actuelle, sauf que j'utilise une bibliothèque de classe. Sera cette question? La vérification des permissions NTFS, la configuration des Logins de sécurité au niveau du serveur et des bases de données, la chaîne de connexion et la méthode de connexion (justificatifs D'identité du serveur SQL), et le pool d'applications IIS et les autres options de dossiers sont toutes les mêmes.

pourquoi ces applications fonctionnent-elles sans ajouter le nom de machine$ aux permissions de l'une ou l'autre de mes boîtes SQL? Mais qu'est ce qu'un lien me dit de faire pour résoudre ce problème.

93
demandé sur Community 2010-05-11 01:01:21

16 réponses

NETWORK SERVICE ET LocalSystem s'authentifieront toujours comme le compte correpsonding localement (builtin\network service et builtin\system), mais les deux s'authentifieront comme le compte machine à distance.

si vous voyez une panne comme Login failed for user 'DOMAIN\MACHINENAME$' cela signifie qu'un processus fonctionnant comme un SERVICE réseau ou comme un système local a accédé à une ressource distante, s'est authentifié comme le compte machine et s'est vu refuser l'autorisation.

Un exemple typique serait une application ASP tournant dans un pool d'applications défini pour utiliser les justificatifs de SERVICE réseau et se connectant à un serveur SQL distant: le pool d'applications s'authentifiera comme la machine tournant le pool d'applications, et est ce compte de machine qui doit être accordé l'accès.

Lorsque l'accès est refusé à un compte d'ordinateur, l'accès doit être accordé à la machine compte. Si le serveur refuse de se connecter 'DOMAIN\MACHINE$', alors vous devez accorder le login Droits De 'DOMAIN\MACHINE$' pas de service réseau. Accorder l'accès au service réseau permettrait à un local processus fonctionnant comme SERVICE réseau de se connecter, pas un service distant, puisque celui-ci authentifiera comme, vous l'avez deviné, domaine\MACHINE$.

si vous vous attendez à ce que l'application asp se connecte au serveur SQL distant en tant que login SQL et que vous obtenez des exceptions à propos du domaine\MACHINE$ cela signifie que vous utilisez une sécurité intégrée dans la chaîne de connexion. Si c'est inattendu, ça veut dire que tu as foiré les chaînes de connexion que tu utilises.

125
répondu Remus Rusanu 2010-05-10 21:29:04

cette erreur se produit lorsque vous avez configuré votre application avec IIS, et que IIS va sur SQL Server et essaie de se connecter avec des justificatifs d'identité qui n'ont pas les autorisations appropriées. Cette erreur peut également se produire lorsque la réplication ou le mirroring est configuré. Je vais aller sur une solution qui fonctionne toujours et est très simple. Allez sur SQL Server > > Security > > Logins et faites un clic droit sur NT AUTHORITY\NETWORK SERVICE et sélectionnez Propriétés

dans l'écran de connexion nouvellement ouvert Propriétés, allez dans l'onglet" cartographie des utilisateurs". Ensuite, dans l'onglet" User Mapping", sélectionnez la base de données désiré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.

19
répondu Humble Coder 2011-10-29 11:13:41

un collègue avait la même erreur et elle était due à une petite erreur de configuration dans IIS.

Le mauvais bassin D'applications a été assigné pour l'application web.

en effet, nous utilisons un Pool d'applications personnalisé avec une identité spécifique pour répondre à nos besoins.

dans son gestionnaire local IIS -> Sites -> Site Web par défaut -> notre nom D'application Web -> paramètres de base... La piscine D'Application était "DefaultAppPool" au lieu de notre coutume Bassin D'Application.

la mise en place du pool d'applications correct a résolu le problème.

10
répondu Julien P 2012-01-26 09:24:17

dans mon cas, j'ai eu Identity="ApplicationPoolIdentity" pour mon bassin de demandes de L'IIS.

après que j'ai ajouté IIS APPPOOL\ApplicationName utilisateur au serveur SQL il fonctionne.

10
répondu nZeus 2016-03-29 12:16:56

l'astuce qui a fonctionné pour moi était de supprimer Integrated Security de ma chaîne de connexion et d'ajouter un User ID=userName; Password=password régulier votre chaîne de connexion dans le App.config de votre libre pourrait ne pas utiliser la sécurité intégrée mais celui créé dans Web.config est!

10
répondu winy101 2017-03-09 22:18:09

j'ai ajouté <identity impersonate="true" /> à ma toile.config et il a bien fonctionné.

9
répondu simonm 2012-11-14 11:54:10

pour moi le problème a été résolu quand j'ai remplacé le compte par défaut intégré 'ApplicationPoolIdentity' avec un compte réseau qui a été autorisé l'accès à la base de données.

Réglages peuvent être effectués dans Internet Information Server (IIS 7+) > Application de Piscines > Advanded Paramètres > Modèle de Processus > Identité

5
répondu Remco 2013-07-10 16:45:53

Essentiellement pour résoudre cela, nous devons définir comme

  • Application Web s'Exécutant sous ApplicationPoolIdentity
  • web Application connecting to databases through ADO.Net utilisation de L'authentification Windows dans la chaîne de connexion

la chaîne de connexion utilisée avec l'authentification Windows inclut l'attribut Trusted_Connection=Yes ou l'attribut équivalent Integrated Security=SSPI dans le fichier Web.config

ma connexion à la base de données est en mode D'authentification Windows. Donc je l'ai résolu en changeant simplement le Application Pools identité de ApplicationPoolIdentity à mon domaine log dans les justificatifs d'identité nom de domaine\MyloginId

l'Étape:

  1. Cliquez sur Pools
  2. Sélectionner Le Nom de votre demande

  3. Aller à paramètres Avancés

  4. Développer Modèle de Processus et cliquez sur Identité . Cliquez sur les trois point sur l'extrémité droite.
  5. , Cliquez Sur Ensemble... bouton et fournir votre identifiant de domaine

Pour moi, il a été résolu.

Note: dans un environnement de Production ou de ti, vous pouvez avoir un compte de service sous le même domaine pour l'identité du pool d'applications. Si c'est le cas, utilisez votre compte service au lieu de votre login.

5
répondu Raj Baral 2018-02-19 19:23:04

nous avions reçu des messages d'erreur similaires lors du traitement d'une base de données de services D'analyse. Il s'est avéré que le nom d'utilisateur, qui a été utilisé pour exécuter l'instance des services D'analyse, n'avait pas été ajouté aux Logins de sécurité du serveur SQL.

dans SQL Server 2012, les services SQL Server et D'analyse sont configurés pour fonctionner comme des utilisateurs différents par défaut. Si vous avez utilisé les valeurs par défaut, assurez-vous toujours que L'utilisateur AS a accès à votre source de données!

2
répondu Philip Atz 2013-06-19 15:03:08

vérifiez si vous avez

User Instance=true

dans la chaîne de connexion. Essayez de l'enlever qui résoudra votre problème.

1
répondu Sarath Avanavu 2015-04-12 06:26:23

j'ai également eu cette erreur avec un serveur SQL utilisateur authentifié

j'ai essayé certaines corrections, mais elles n'ont pas fonctionné.

la solution dans mon cas était de configurer son" mode D'authentification du serveur " pour permettre L'authentification du serveur SQL, sous gestion Studio: Propriétés/Sécurité.

1
répondu Arjan 2017-03-06 19:32:42

le seul point que tout le monde semble avoir négligé est que vous pouvez vouloir sécurité intégrée = vrai. Vous pouvez avoir le site fonctionnant sous un compte de piscine. C'est très bien ainsi et il est toujours possible de frapper le serveur SQL avec le justificatif d'utilisateur d'origine et pas celui de la piscine. Ça s'appelle une délégation restreinte. Si vous l'activez et configurez un SPN, windows traduira les informations d'identification de la piscine avec les demandes de l'utilisateur allant au service final (SQL n'est qu'un de ces services). Vous doivent enregistrer le seul et unique serveur SQL qui gère les requêtes SQL sur le serveur web. Mettre tout cela en place est trop pour moi d'essayer de décrire avec précision ici. Ça m'a pris du temps de m'en occuper moi-même.

1
répondu Todd Beaulieu 2017-03-20 16:44:19

j'ai passé quelques heures à essayer de résoudre le problème et je l'ai finalement obtenu - le navigateur de serveur SQL a été"arrêté". Le correctif est de le changer en mode "automatique":

si elle est désactivée, passer au panneau de configuration- > administratif Outils - > Services, et cherchez L'Agent SQL Server. Clic-droit, et sélectionnez "Propriétés"."Dans le "Type de Démarrage" liste déroulante, changement de "Désactivé" sur "Automatique".

citation de ici

0
répondu A Petrov 2017-05-23 12:25:57

j'ai eu le même problème plus tôt,en enlevant Persist Security Info=True de la chaîne de connexion a fonctionné pour moi.

0
répondu msk 2017-02-12 01:04:17

j'ai rencontré ce problème lorsqu'un client a renommé un serveur SQL. Le service de rapports SQL a été configuré pour se connecter à l'ancien nom de serveur, qu'ils avaient également créé un alias pour celui redirigé vers L'IP du nouveau nom de serveur.

toutes leurs anciennes applications IIS fonctionnaient, redirigeant vers le nouveau nom de serveur via l'alias. Sur une intuition, j'ai vérifié s'ils faisaient des SSR. Tenter de se connecter au site SSRS a produit l'erreur:

"Le service n'est pas disponible.Contactez votre administrateur système pour résoudre le problème. Administrateurs système: le serveur de rapports ne peut pas se connecter à sa base de données. Assurez-vous que la base de données est en cours d'exécution et accessible. Vous pouvez également consulter le journal de trace du serveur de rapports pour plus de détails. "

il fonctionnait sur le serveur, mais ne parvenait pas à se connecter parce qu'il utilisait l'alias pour l'ancien nom de serveur. Reconfigurer SSRS pour utiliser le nouveau nom de serveur au lieu du vieux/alias fixe.

0
répondu SQLMonger 2018-08-31 19:35:35

Pour moi le problème avec le "DOMAINE\MACHINENAME$" fixée par le paramètre DefaultApplicationPool Identité NetworkService .

enter image description here

0
répondu Arsen Khachaturyan 2018-09-26 06:35:09