Fügen Sie IIS 7 AppPool-Identitäten als SQL Server-Anmeldungen hinzu

232

Ich verwende eine IIS 7-Website mit einem AppPool im integrierten Pipeline-Modus . Die AppPools werden NICHT unter NetworkService usw. ausgeführt (Identität) (nach Zweck), sondern verwenden ihre eigene AppPool-Identität (IIS AppPool \ MyAppPool).

Dies ist ein sogenanntes Dienstkonto oder virtuelles Konto. (ein Benutzerkonto, das kein vollständiges Konto ist ...)

Ich möchte diesem Dienstkonto (IIS AppPool \ MyAppPool) die Berechtigung erteilen, eine Verbindung zu meinem SQL Server 2008 Express herzustellen (wird im gemischten Authentifizierungsmodus ausgeführt).

Während SQL Server jedes normale Benutzerkonto hinzufügen kann, kann das virtuelle Konto IIS AppPool \ MyAppPool nicht zu den gültigen Anmeldungen hinzugefügt werden (SQL Server gibt an, dass das Konto nicht gefunden werden kann).

Gibt es einen Trick, den ich aktivieren muss, damit die virtuellen Konten funktionieren? (Der Prozess w3wp.exe wird laut taskmgr unter dieser Identität ausgeführt, aber ich kann das Konto auch nicht für die NTFS-Sicherheit verwenden ...)

Danke für Ihre Hilfe!

Max
quelle

Antworten:

379

Das "IIS APPPOOL \ AppPoolName" funktioniert, aber wie bereits erwähnt, scheint es kein gültiger AD-Name zu sein. Wenn Sie im Dialogfeld "Benutzer oder Gruppe auswählen" danach suchen, wird es (tatsächlich) nicht angezeigt wird es finden, aber es wird denken, dass es ein tatsächliches Systemkonto ist, und es wird versuchen, es als solches zu behandeln ... was nicht funktioniert und Ihnen die Fehlermeldung gibt, dass es nicht gefunden wird).

Wie ich es zum Laufen gebracht habe, ist:

  1. Suchen Sie in SQL Server Management Studio nach dem Sicherheitsordner (der Sicherheitsordner auf derselben Ebene wie die Ordner "Datenbanken, Serverobjekte usw." ... nicht der Sicherheitsordner in jeder einzelnen Datenbank).
  2. Klicken Sie mit der rechten Maustaste auf Logins und wählen Sie "New Login".
  3. Geben Sie im Feld Anmeldename IIS APPPOOL \ YourAppPoolName ein - klicken Sie nicht auf Suchen
  4. Füllen Sie alle anderen gewünschten Werte aus (z. B. Authentifizierungstyp, Standarddatenbank usw.).
  5. OK klicken

Solange der AppPool-Name tatsächlich existiert, sollte die Anmeldung jetzt erstellt werden.

dp.
quelle
4
Es tut mir leid, einen alten Beitrag wiederzubeleben, aber weiß jemand, ob dies Sicherheitsrisiken in einer Live-Umgebung hat?
Dooburt
34
erstaunlich hilfreich, aber umwerfend (und beschissen) Microsoftian.
Evan Nagle
16
Beeindruckend. "Klicken Sie nicht auf Suchen" in Schritt 3 scheint einen Unterschied zu machen (?)
Jedidja
16
Wird dies nicht fehlschlagen, wenn sich die SQL Server-Instanz auf einem anderen Server befindet? Zum Beispiel - woher weiß das SQL1über die lokale / virtuelle IIS AppPool\MyAppPoolauf WEB1?
one.beat.consumer
3
Gibt es eine Lösung, wenn sich Ihr Webserver und Ihr SQL Server auf verschiedenen Computern befinden !! ?? Ich kann die Anmeldung finden, aber ich kann die neue SQL-Anmeldung nicht erstellen. (Wenn ich keine Schecknamen mache ... funktioniert es immer noch nicht)
Dan B
63
CREATE LOGIN [IIS APPPOOL\MyAppPool] FROM WINDOWS;
CREATE USER MyAppPoolUser FOR LOGIN [IIS APPPOOL\MyAppPool];
Ryan Prechel
quelle
1
Schön - obwohl die akzeptierte Antwort richtig ist - habe ich es geschafft, mich in eine Situation zu bringen, in der Management Studio nicht funktionierte, also war diese rohe TSQL-Lösung genau das, was ich brauchte.
Andrew Patterson
4
Hinweis für Noobs wie mich: Stellen Sie sicher, dass diese Abfrage für die Datenbank ausgeführt wird, auf die Sie mit dem IIS-App-Pool zugreifen möchten. Die zweite Anweisung befindet sich auf Datenbankebene. Möglicherweise müssen Sie den Benutzer zu einem Mitglied bestimmter Datenbankrollen machen und ihm Berechtigungen für die Schemas erteilen, z dbo.
MarioDS
Als ich feststellte, dass es nicht möglich ist, IIS APPPOOL-Anmeldungen über die SSMS-GUI hinzuzufügen, habe ich Ihr Skript ausgeführt. VIELEN DANK! Es wurde verwendet, um möglich zu sein - nicht in SSMS 18! Ich nehme an, dies ist jetzt ein "Feature"
MC9000
6

Wenn Sie über mehrere Computer hinweg arbeiten, müssen Sie entweder NETWORK SERVICE, LOCAL SYSTEM, ein Domänenkonto oder ein verwaltetes SQL 2008 R2-Konto (falls vorhanden) verwenden (was meine Präferenz ist, wenn Sie über eine solche Infrastruktur verfügen). . Sie können kein Konto verwenden, das für die Active Directory-Domäne nicht sichtbar ist.

Dave Markle
quelle
6

Nebenbei bemerkt, Prozesse, die virtuelle Konten verwenden (NT Service \ MyService und IIS AppPool \ MyAppPool), werden weiterhin unter dem Konto "NETWORK SERVICE" ausgeführt, wie in diesem Beitrag vorgeschlagen: http://www.adopenstatic.com/cs/blogs/ken/ Archiv / 2008/01/29 / 15759.aspx . Der einzige Unterschied besteht darin, dass diese Prozesse Mitglieder der Gruppen "NT Service \ MyService" oder "IIS AppPool \ MyAppPool" sind (da es sich tatsächlich um Gruppen und nicht um Benutzer handelt). Dies ist auch der Grund, warum sich die Prozesse im Netzwerk genauso wie der Computer authentifizieren wie das NETWORK SERVICE-Konto.

Der Weg zum Sichern des Zugriffs besteht nicht darin, dass diese Konten nicht über NETWORK SERVICE-Berechtigungen verfügen, sondern mehr Berechtigungen speziell für "NT Service \ MyService" oder "IIS AppPool \ MyAppPool" zu erteilen und bei Bedarf Berechtigungen für "Benutzer" zu entfernen.

Wenn jemand genauere oder widersprüchlichere Informationen hat, posten Sie diese bitte.

Steven
quelle
2

Dies könnte das sein, wonach Sie suchen ...

http://technet.microsoft.com/en-us/library/cc730708%28WS.10%29.aspx

Ich würde auch längerfristig empfehlen, einen Domänenbenutzer mit eingeschränkten Rechten in Betracht zu ziehen. Was Sie versuchen, funktioniert in einem Silomaschinenszenario einwandfrei, aber Sie müssen Änderungen vornehmen, wenn Sie für den DB-Server auf einen anderen Computer wechseln.

keithwarren7
quelle
0

Ich habe es durch Versuch und Irrtum herausgefunden ... der wahre Riss in der Rüstung war eine wenig bekannte Einstellung in IIS in der Configuration Editorfür die Website in

Section: system.webServer/security/authentication/windowsAuthentication

From: ApplicationHost.config <locationpath='ServerName/SiteName' />

genannt useAppPoolCredentials(was Falsestandardmäßig eingestellt ist. Setzen Sie dies auf Trueund das Leben wird wieder großartig !!! Hoffe, das erspart dem nächsten Kerl Schmerzen ....

Geben Sie hier die Bildbeschreibung ein

Dan B.
quelle
Ich habe den gleichen Prozess durchgeführt, aber das Problem wurde nicht gelöst. Sie müssen noch etwas anderes getan haben, können Sie bitte teilen?
RSB
@RSB - hast du alle anderen Schritte befolgt? Haben Sie die appPools eingerichtet und ihnen Berechtigungen für die Dateien erteilt, in denen sich Ihre Website befindet? Haben Sie den Servernamen als Login mit Berechtigungen zum SQL Server hinzugefügt? Haben Sie den appPool mit Berechtigungen auf Ihren SQL Server übertragen? Haben Sie IIS für die Verwendung von WindowsAuthentication geändert? Welche Fehler bekommen Sie? Funktioniert es in Ihrer Entwicklungsumgebung und nicht in der Produktion?
Dan B
Ich habe appPool eingerichtet, aber wie kann ich ihnen die Berechtigung für Dateien erteilen, in denen sich die Website befindet? Wie füge ich den Servernamen als Login mit Berechtigungen zum SQL Server hinzu? Ich habe auch SQL Server mit Berechtigungen zu appPool hinzugefügt. So ändern Sie IIS für die Verwendung von WindowsAuthentocation. Es funktioniert in meiner Entwicklungsumgebung, wenn sich IIS und SQL Server auf demselben Computer befinden, es wird jedoch die Fehlermeldung "System-ComponentModel.Win32Exception" angezeigt: Zugriff verweigert Fehler, wenn sich IIS und SQL Server auf einem anderen Computer befinden. Bitte vorschlagen.
RSB
Wenn du mir deine E-Mail gibst, sende ich dir ein Dokument, das ich gemacht habe, wie man das alles macht ... es gibt zu viel Schleim, um es hier hinzuzufügen ...
Dan B.
@RSB Ich habe dir eine E-Mail geschickt. Viel Glück.
Dan B
0

In meinem Fall bestand das Problem darin, dass ich mit der Visual Studio / Episerver-Erweiterung begonnen habe, ein MVC Alloy-Beispielprojekt von Grund auf neu zu erstellen, und es funktionierte einwandfrei, wenn es mit lokalem Visual Studio iis Express ausgeführt wurde. Standardmäßig verweist die SQL-Datenbank jedoch auf LocalDB, und als ich die Site auf lokalem IIS bereitstellte, wurden einige der anfänglichen Fehler, die ich behoben habe, fehlerhaft: 1. Hinzufügen der URL der lokalen Site-URL zu C: / Windows / System32 / drivers / etc / hosts 2. Durch Bearbeiten der application.config wurde der Dateispeicherort gefunden, indem Sie mit der rechten Maustaste auf IIS Express in der unteren rechten Ecke des Bildschirms klicken, wenn Sie die Site mit Visual Studio ausführen, und dort eine Bindung für die lokale iis-URL hinzufügen. 3. Schließlich steckte ich fest mit "nicht auf Datenbankfehler zugreifen können"

Arokanika
quelle