Ich weiß, dass dies fast ein Duplikat von: Der Fehler "Anmeldung für Benutzer 'NT AUTHORITY \ IUSR' fehlgeschlagen" in ASP.NET und SQL Server 2008 und Anmeldung für Benutzer 'Benutzername' - System.Data.SqlClient.SqlException mit LINQ in fehlgeschlagen externe Projekt- / Klassenbibliothek, aber einige Dinge passen nicht zu anderen Anwendungen auf meinem Server, und ich bin mir nicht sicher, warum.
Verwendete Boxen:
Web Box
SQL Box
SQL Test Box
Meine Bewerbung:
Ich habe eine ASP.NET-Webanwendung, die auf eine Klassenbibliothek verweist, die LINQ-to-SQL verwendet. Die Verbindungszeichenfolge wurde ordnungsgemäß in der Klassenbibliothek eingerichtet. Wie pro Anmeldung für den Benutzer ‚username‘ ist fehlgeschlagen - System.Data.SqlClient.SqlException mit LINQ in externem Projekt / Klassenbibliothek ich auch diese Verbindungszeichenfolge an die Web Application hinzugefügt.
Die Verbindungszeichenfolge verwendet SQL-Anmeldeinformationen (sowohl in der Webanwendung als auch in der Klassenbibliothek):
<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" />
Diese Verbindung wurde durch Hinzufügen zum Server-Explorer als funktionsfähig bestätigt. Dies ist die Verbindungszeichenfolge, die meine .dbml-Datei verwendet.
Das Problem:
Ich erhalte folgende Fehlermeldung:
System.Data.SqlClient.SqlException: Login failed for user 'DOMAIN\MACHINENAME$'.
Jetzt darauf verweisen Der Fehler "Anmeldung für Benutzer 'NT AUTHORITY \ IUSR' fehlgeschlagen" in ASP.NET und SQL Server 2008 besagt, dass dies wirklich der lokale Netzwerkdienst ist und die Verwendung eines anderen Nicht-Domänennamens nicht funktioniert.
Ich bin jedoch verwirrt, weil ich sowohl SQL Box als auch SQL Test Box SQL Management Studio aktiviert habe und beide NT AUTHORITY/NETWORK SERVICE
unter Sicherheit -> Anmeldungen auf Datenbankebene nicht unter Sicherheit -> Benutzer aufgeführt sind, sondern auf Datenbankebene Sicherheit -> Benutzer Ich habe den Benutzer in der Verbindungszeichenfolge angezeigt.
Auf NTFS-Ebene auf dem Webserver haben die Berechtigungen die volle Kontrolle über NETWORK SERVICE.
Der Grund, warum ich verwirrt bin, ist, dass ich viele andere Webanwendungen auf meinem Webserver habe, die auf Datenbanken sowohl in SQL Box als auch in SQL Test Box verweisen und alle funktionieren. Ich kann jedoch keinen Unterschied zwischen ihnen und meiner aktuellen Anwendung feststellen, außer dass ich eine Klassenbibliothek verwende. Wird das wichtig sein? Das Überprüfen der NTFS-Berechtigungen, das Einrichten von Sicherheitsanmeldungen auf Server- und Datenbankebene, die Verbindungszeichenfolge und die Verbindungsmethode (SQL Server-Anmeldeinformationen) sowie der IIS-Anwendungspool und andere Ordneroptionen sind identisch.
Warum funktionieren diese Anwendungen, ohne den Maschinennamen $ zu den Berechtigungen einer meiner SQL-Boxen hinzuzufügen? Aber genau das sagt mir der eine Link, um dieses Problem zu beheben.
quelle
Antworten:
NETWORK SERVICE und LocalSystem authentifizieren sich immer lokal als das entsprechende Konto (integrierter \ Netzwerkdienst und integriertes \ System), aber beide authentifizieren sich remote als Computerkonto.
Wenn Sie einen Fehler wie
Login failed for user 'DOMAIN\MACHINENAME$'
diesen sehen, bedeutet dies, dass ein Prozess, der als NETWORK SERVICE oder als LocalSystem ausgeführt wird, auf eine Remote-Ressource zugegriffen hat, sich als Computerkonto authentifiziert hat und die Autorisierung verweigert wurde.Ein typisches Beispiel wäre eine ASP-Anwendung, die in einem App-Pool ausgeführt wird, um NETWORK SERVICE-Anmeldeinformationen zu verwenden und eine Verbindung zu einem Remote-SQL Server herzustellen: Der App-Pool authentifiziert sich als der Computer , auf dem der App-Pool ausgeführt wird, und ist dieses Computerkonto, dem Zugriff gewährt werden muss .
Wenn der Zugriff auf ein Computerkonto verweigert wird, muss dem Computerkonto Zugriff gewährt werden. Wenn sich der Server weigert, sich bei 'DOMAIN \ MACHINE $' anzumelden, müssen Sie 'DOMAIN \ MACHINE $' Anmelderechte gewähren, nicht bei NETWORK SERVICE. Wenn Sie Zugriff auf NETWORK SERVICE gewähren, kann ein lokaler Prozess, der als NETWORK SERVICE ausgeführt wird, eine Verbindung herstellen, nicht ein Remote-Prozess, da sich der Remote-Prozess als DOMAIN \ MACHINE $ authentifiziert.
Wenn Sie erwarten, dass die asp-Anwendung als SQL-Anmeldung eine Verbindung zum Remote-SQL Server herstellt, und Sie Ausnahmen über DOMAIN \ MACHINE $ erhalten, bedeutet dies, dass Sie Integrated Security in der Verbindungszeichenfolge verwenden. Wenn dies unerwartet ist, bedeutet dies, dass Sie die von Ihnen verwendeten Verbindungszeichenfolgen vermasselt haben.
quelle
Dieser Fehler tritt auf, wenn Sie Ihre Anwendung mit IIS konfiguriert haben und IIS zu SQL Server wechselt und versucht, sich mit Anmeldeinformationen anzumelden, die nicht über die richtigen Berechtigungen verfügen. Dieser Fehler kann auch auftreten, wenn die Replikation oder Spiegelung eingerichtet ist. Ich werde eine Lösung durchgehen, die immer funktioniert und sehr einfach ist. Gehen Sie zu SQL Server >> Sicherheit >> Anmeldungen, klicken Sie mit der rechten Maustaste auf NT AUTHORITY \ NETWORK SERVICE und wählen Sie Eigenschaften
Wechseln Sie im neu geöffneten Bildschirm der Anmeldeeigenschaften zur Registerkarte "Benutzerzuordnung". Wählen Sie dann auf der Registerkarte "Benutzerzuordnung" die gewünschte Datenbank aus, insbesondere die Datenbank, für die diese Fehlermeldung angezeigt wird. Überprüfen Sie im unteren Bildschirm die Rolle db_owner. OK klicken.
quelle
In meinem Fall hatte ich
Identity="ApplicationPoolIdentity"
für meinen IIS Application Pool.Nachdem ich
IIS APPPOOL\ApplicationName
SQL Server hinzugefügt habe, funktioniert es.quelle
Grundsätzlich müssen wir einige Einstellungen vornehmen, um dies zu beheben
Die bei der Windows-Authentifizierung verwendete Verbindungszeichenfolge enthält entweder ein
Trusted_Connection=Yes
Attribut oder das entsprechende AttributIntegrated Security=SSPI
in derWeb.config
DateiMeine Datenbankverbindung befindet sich im Windows-Authentifizierungsmodus. Daher habe ich das Problem gelöst, indem ich einfach die Identität der Anwendungspools von ApplicationPoolIdentity in mein Domänenprotokoll mit den Anmeldeinformationen DomainName \ MyloginId geändert habe
Schritt:
Wählen Sie den Namen Ihrer Anwendung
Gehen Sie zu Erweiterte Einstellungen
Für mich war es gelöst.
Hinweis: In der Produktions- oder IT-Umgebung haben Sie möglicherweise ein Dienstkonto unter derselben Domäne für die Identität des App-Pools. Verwenden Sie in diesem Fall das Dienstkonto anstelle Ihres Logins.
quelle
Der Trick, der bei mir funktioniert hat, bestand darin,
Integrated Security
aus meiner Verbindungszeichenfolge zu entfernen und eine reguläreUser ID=userName; Password=password
Verbindungszeichenfolge in dieApp.config
Bibliothek aufzunehmen. Möglicherweise wird keine integrierte Sicherheit verwendet, aber die in erstellteWeb.config
ist!quelle
Ein Kollege hatte den gleichen Fehler und er war auf einen kleinen Konfigurationsfehler in IIS zurückzuführen.
Für die Webanwendung wurde der falsche Anwendungspool zugewiesen.
In der Tat verwenden wir einen benutzerdefinierten Anwendungspool mit einer bestimmten Identität, um unsere Anforderungen zu erfüllen.
In seinem lokalen IIS-Manager -> Sites -> Standardwebsite -> Name unserer Webanwendung -> Grundeinstellungen ... Der Anwendungspool war "DefaultAppPool" anstelle unseres benutzerdefinierten Anwendungspools.
Das Einstellen des richtigen Anwendungspools löste das Problem.
quelle
Ich habe
<identity impersonate="true" />
zu meiner web.config hinzugefügt und es hat gut funktioniert.quelle
Für mich wurde das Problem behoben, als ich das integrierte Standardkonto 'ApplicationPoolIdentity' durch ein Netzwerkkonto ersetzte, das Zugriff auf die Datenbank hatte.
Einstellungen können unter Internet Information Server (IIS 7+)> Anwendungspools> Erweiterte Einstellungen> Prozessmodell> Identität vorgenommen werden
quelle
Für mich wurde das Problem mit 'DOMAIN \ MACHINENAME $' behoben, indem
DefaultApplicationPool
Identity auf gesetzt wurdeNetworkService
.quelle
Bei der Verarbeitung einer Analysis Services-Datenbank wurden ähnliche Fehlermeldungen angezeigt. Es stellte sich heraus, dass der Benutzername, mit dem die Analysis Services-Instanz ausgeführt wurde, nicht zu den Sicherheitsanmeldungen des SQL Servers hinzugefügt wurde.
In SQL Server 2012 sind die SQL Server- und Analysedienste so konfiguriert, dass sie standardmäßig als unterschiedliche Benutzer ausgeführt werden. Wenn Sie die Standardeinstellungen übernommen haben, stellen Sie immer sicher, dass der AS-Benutzer Zugriff auf Ihre Datenquelle hat!
quelle
Überprüfen Sie, ob Sie haben
in Verbindungszeichenfolge. Versuchen Sie, es zu entfernen, um Ihr Problem zu beheben.
quelle
Ich hatte auch diesen Fehler mit einem SQL Server-authentifizierten Benutzer
Ich habe einige der Korrekturen ausprobiert, aber sie haben nicht funktioniert.
In meinem Fall bestand die Lösung darin, den "Serverauthentifizierungsmodus" so zu konfigurieren, dass die SQL Server-Authentifizierung unter Management Studio: Eigenschaften / Sicherheit möglich ist.
quelle
Der einzige Punkt, den anscheinend jeder übersehen hat, ist, dass Sie möglicherweise integrierte Sicherheit = true wünschen. Möglicherweise wird die Site unter einem Poolkonto ausgeführt. Das ist alles in Ordnung und es ist immer noch möglich, den SQL Server mit den ursprünglichen Benutzeranmeldeinformationen und nicht mit den Pools zu erreichen. Es wird als eingeschränkte Delegierung bezeichnet. Wenn Sie es aktivieren und ein SPN einrichten, übersetzt Windows die Anmeldeinformationen des Pools mit den Anmeldeinformationen des Benutzers, wenn Anforderungen an den endgültigen Dienst gesendet werden (SQL ist nur ein solcher Dienst). Sie müssen den EINZIGEN SQL-Server registrieren, der SQL-Anforderungen auf dem Webserver bearbeitet. Das alles einzurichten ist zu viel für mich, um es hier genau zu beschreiben. Ich habe eine ganze Weile gebraucht, um es selbst durchzuarbeiten.
quelle
Ich habe ein paar Stunden damit verbracht, das Problem zu beheben, und habe es endlich verstanden - der SQL Server-Browser wurde "gestoppt". Das Update besteht darin, es in den "Automatik" -Modus zu ändern:
Zitat von hier
quelle
Ich hatte das gleiche Problem früher, das Entfernen
Persist Security Info=True
von der Verbindungszeichenfolge funktionierte für mich.quelle
Ich bin auf dieses Problem gestoßen, als ein Client einen SQL Server umbenannte. Der SQL Reporting Service wurde so konfiguriert, dass eine Verbindung zum alten Servernamen hergestellt wird, für den auch ein Alias erstellt wurde, der auf die IP des neuen Servernamens umgeleitet wird.
Alle alten IIS-Apps funktionierten und wurden über den Alias zum neuen Servernamen umgeleitet. Ich habe ahnungsvoll überprüft, ob SSRS ausgeführt wird. Der Versuch, eine Verbindung zur SSRS-Site herzustellen, ergab den folgenden Fehler:
"Der Dienst ist nicht verfügbar. Wenden Sie sich an Ihren Systemadministrator, um das Problem zu beheben. Systemadministratoren: Der Berichtsserver kann keine Verbindung zu seiner Datenbank herstellen. Stellen Sie sicher, dass die Datenbank ausgeführt wird und auf sie zugegriffen werden kann. Sie können auch das Ablaufverfolgungsprotokoll des Berichtsservers auf Details überprüfen . "
Es wurde auf dem Server ausgeführt, konnte jedoch keine Verbindung herstellen, da der Alias für den alten Servernamen verwendet wurde. Durch Neukonfiguration von SSRS zur Verwendung des neuen Servernamens anstelle des alten / Alias wurde dieser behoben.
quelle
quelle
Beim Versuch, eine Lösung mit den folgenden Methoden zu testen, ist dieser Fehler aufgetreten
Die Lösung war wie folgt: Ich musste Visual Studio öffnen und unter einem anderen Konto ausführen, da das Konto, das ich zum Öffnen verwendete, nicht mein Administratorkonto war.
Wenn Ihr Problem meinem ähnlich ist: Stecken Sie den VS in die Taskleiste, öffnen Sie das Menü mit Umschalttaste und Rechtsklick, damit Sie VS als anderen Benutzer öffnen können.
quelle
Schätzen Sie, dass es hier ein paar gute Antworten gibt, aber da ich gerade Zeit verloren habe, dies herauszufinden, kann dies hoffentlich jemandem helfen.
In meinem Fall hatte alles gut funktioniert und dann ohne ersichtlichen Grund mit dem in der Frage angegebenen Fehler gestoppt.
IIS wurde als Netzwerkdienst ausgeführt, und der Netzwerkdienst wurde zuvor auf SQL Server eingerichtet (siehe andere Antworten auf diesen Beitrag). Serverrollen und Benutzerzuordnungen sahen korrekt aus.
Das Problem war; aus absolut keinem offensichtlichen Grund; Der Netzwerkdienst hatte in der Datenbank auf "Anmelderechte verweigern" umgestellt.
Reparieren:
Permission to Connect To Database Engine
auf 'Grant'.quelle