ASP.NET 4.5 auf IIS 7.5 mit SQL Server Express 2012 einrichten

Hier mein Vorgehen nach langem und frustrierendem Herumprobieren:

IIS vorbereiten

  1. Verzeichnis für App anlegen und App hineinkopieren
  2. App im IIS-Manager zum Beispiel als neue Site hinzufügen (mit eigenem AppPool)
  3. Anonyme Authentifizierung auf „AppPool-Identity“ festlegen
  4. AppPool-Grundeinstellungen auf .NET 4.0 (integriert) festlegen
  5. Erweiterte AppPool-Einstellungen auf „Benutzerprofil laden = True“ und „Identität = AppPool-Identity“ festlegen
  6. In der Kommandozeile folgende Befehle ausführen:
    icacls <app-path> /grant "IIS APPPOOL\<apppool-name>":(OI)(CI)(RX)
    icacls <app-path>\App_Data /grant "IIS APPPOOL\<apppool-name>":(OI)(CI)(F)

SQL Server vorbereiten

  1. Mit den folgenden Befehlen den SQL Server Express aktualisieren:
    CREATE LOGIN [IIS APPPOOL\<apppool-name>] FROM WINDOWS
    GRANT CREATE DATABASE TO [IIS APPPOOL\<apppool-name>]

Der passende Connection String

Beim Connection String kann es dann wieder etwas hakelig werden, aber der folgende Eintrag funktioniert ganz gut:
Data Source=.\SQLEXPRESS; Initial Catalog=<db-name>; Integrated Security=SSPI; AttachDBFilename=|DataDirectory|<db-name>.mdf; User Instance=true

IIS 7 + SQL Server Express 2008

Leider, leider scheint das bei dieser Kombo nicht so „einfach“ zu sein, denn mit „User Instance=true“ kommt es zu Impersonation-Fehlern und ohne fehlen die Rechte im App_Data-Verzeichnis…

Letzteres lässt sich aber korrigieren, indem man dem User „<host-name>\SQLServerMSSQLUser$<host-name>$SQLEXPRESS“ Vollzugriff auf App_Data gewährt – dann kann „User Instance“ komplett weggelassen werden.

SQL Server Express (localdb) per OleDB ansprechen

Der Zugriff auf die SQL Server Express 2012 Instanz „(localdb)\v11.0“ ist leider nicht über den OleDB-Provider „SQLOLEDB“ möglich. Stattdessen muss „SQLNCLI11“ (der Native Client) verwendet werden. Mit „Trusted_Connection=yes“ kann dann noch die Windows-Authentifizierung aktiviert werden. Der vollständige ConnectionString könnte dann so aussehen:

Provider=SQLNCLI11;
Data Source=(localdb)\v11.0;
Initial Catalog=<DB_NAME>;
Integrated Security=SSPI;
Trusted_Connection=yes;

SQL Server-Datenbank lässt sich nicht wiederherstellen

Das Wiederherstellen (RESTORE) einer auf einem SQL-Server (Standard 2008) gesicherten Datenbank auf einem anderen SQL-Server (Express 2012 – localdb\v11.0) führte heute bei mir zu Fehlermeldungen und Serverabstürzen. Ob neue Datenbank automatisch anlegen lassen oder in vorhandene importieren, machte keinen Unterschied – die MDF- und LDF-Dateien waren vorhanden und auch mit Daten gefüllt, aber die Datenbank ließ sich nicht laden. Leider wusste kein Forum von einer echten Lösung zu berichten, stattdessen wurde mit esoterischen Skripten aufgewartet, die rein gar nichts brachten. Ziemlich frustriert entschied ich mich dann dazu, den letzten Import per „Detach“ im Management Studio aus dem Server zu lösen und dann wieder per „Attach“ neu hinzuzufügen et voíla: die Datenbank war online!