2009-08-13 9 views
13

Meine ASP.NET v3.5-Webanwendung gibt die folgende Ausnahme beim Versuch, eine Verbindung zu einem SQL Server zu öffnen 2008-Datenbank:Der Fehler "Anmeldung fehlgeschlagen für Benutzer 'NT AUTHORITY IUSR'" in ASP.NET und SQL Server 2008

System.Data.SqlClient.SqlException: Datenbank kann nicht geöffnet "mydbname" von der Anmeldung angefordert. Der Login ist fehlgeschlagen. Anmeldung fehlgeschlagen für Benutzer 'NT AUTHORITY \ IUSR'.

Die Sache ist, ich habe NT AUTHORITY\IUSR auf der Liste der Server des Servers hinzugefügt, und auf die Datenbank der Benutzerliste. Für den Server habe ich dem Benutzer die Rolle Public und für die Datenbank die Berechtigungen db_datareader erteilt.

Ich habe auch das gleiche für NT AUTHORITY\NETWORK SERVICE gewährt, das ist die Identität, die der Anwendungspool unter ausgeführt wird.

Die Webanwendung wird von IIS7 gehostet, wenn dies einen Unterschied macht. Das Problem tritt erneut auf, wenn sich die Datenbank und IIS auf derselben physischen Maschine befinden.

Antwort

6

Der Trick hier ist, dass NT AUTHORITY\NETWORK SERVICE tatsächlich in der Datenbank als DOMAINNAME\MACHINENAME$ erscheint (beachten Sie die $ Zeichen!). Das heißt, wenn Sie die Computergrenze von Ihrem Webserver zu SQL Server überschreiten, sieht SQL Server das Computerkonto, wenn Sie die Konten NETWORK SERVICE oder LOCAL SYSTEM verwenden. Wenn Sie ein anderes Nicht-Domänenkonto verwenden, erhält SQL Server Ihre Anmeldeinformationen nicht.

Ich bin ein wenig verwirrt durch Ihre Fehlermeldung. Um ehrlich zu sein, glaube ich nicht, dass wenn die DB auf einer anderen Box ist, du alles andere als Login Failed for NT AUTHORITY\ANONYMOUS LOGON sehen wirst.

IUSR wird für anonyme Websites verwendet und kann die Verbindung nicht an SQL Server übergeben. Sie können einen Weg finden, damit es funktioniert, wenn Sie alles auf der gleichen Maschine machen, aber ich würde es nie wissen, weil ich es nie so machen würde ... ;-)

+1

Ich testete um zu sehen, ob es auf dem gleichen Feld arbeiten alle werden - in der Produktion am besten die Topologie wie beschrieben sich ausbreitend. Wie auch immer, du hast es geschafft - ich musste Berechtigungen für den MachineName $ hinzufügen. Vielen Dank! –

+1

Ich wollte das nur auf ähnliche Weise hinzufügen. Ich löste dieses Problem, indem ich Berechtigungen für den IUSER - Benutzernamen in den IIS 6.0 - Websites -> Eigenschaften -> Verzeichnissicherheit -> Bearbeiten (Authentifizierung ...) erstelle, die IUSR_MACHINENAME – shawad

+0

Wie fügten Sie Berechtigungen hinzu MachineName $ in VS –

1

Ich würde vorschlagen zu erstellen ein separates (vorzugsweise Domänen-) Konto und geben Sie es in der Verbindungszeichenfolge an (normalerweise in web.config) Dann können Sie die Berechtigungen auf dem Webserver einschränken, was dieses Konto kann und was nicht. Dann können Sie diesem Konto erforderliche Berechtigungen in SQL Server gewähren.

-1

Die einfache Lösung ist web.config-Datei zu überprüfen und sicherzustellen, dass eine dieses Teil der DB-Verbindungszeichenfolge ist:

Vertrauenswürdige Verbindung = false

ODER

Integrated Security = True

1

Ich hatte das gleiche Problem und löste dies, indem ich Anwendungspool änderte.

-2

Dieses Problem wird angezeigt, wenn Sie eine neue Datenbank in Ihrer letzten Datenbank wiederherstellen.

Um dies zu beheben, müssen Sie auf sqlserver, dann Sicherheit gehen und dann Ihren Apppool erneut einstellen.

1

Falls es jemand hilft, habe ich in web.config < Identität impersonate = "false" /> für diesen Fehler entfernt (unter < System.web>)

0

Statt Integrated Security=True; in Verbindungszeichenfolge zu verwenden, verwenden nur Benutzername und Passwort-Authentifizierung user=sa; pwd=mypassword;

+0

Nein! Sie können nicht empfehlen, Benutzername und Kennwort zu verwenden, wenn es einen anderen Anwendungsfall wie die Autorisierung mit dem Computerkonto gibt. –

Verwandte Themen