Hier mein Vorgehen nach langem und frustrierendem Herumprobieren:
IIS vorbereiten
- Verzeichnis für App anlegen und App hineinkopieren
- App im IIS-Manager zum Beispiel als neue Site hinzufügen (mit eigenem AppPool)
- Anonyme Authentifizierung auf „AppPool-Identity“ festlegen
- AppPool-Grundeinstellungen auf .NET 4.0 (integriert) festlegen
- Erweiterte AppPool-Einstellungen auf „Benutzerprofil laden = True“ und „Identität = AppPool-Identity“ festlegen
- 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
- 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.