
Ich bin ratlos. Ich habe eine Client-Site auf einem virtuellen privaten Server – Windows Web Server 2008 SP2, IIS7, SQL Server 2008 Express.
Ich versuche, eine zweite Webanwendung einzurichten, damit er Updates überprüfen kann, bevor sie live gehen. Ich habe die Webanwendung in IIS7 erstellt und SQL Server eine zweite Datenbank hinzugefügt. Die zweite Datenbank ist im Wesentlichen eine Kopie der Produktionsdatenbank, wobei dem Datenbanknamen „DEV“ vorangestellt ist und einige neue Felder in einigen Tabellen vorhanden sind.
Meine Produktionssite funktioniert einwandfrei. Die Testsite gibt jedoch eine SqlException zurück: „Ungültiger Spaltenname ‚Version‘.“ Dies ist eines der neuen Felder – was mich glauben lässt, dass meine Entwicklungssite auf die Produktionsdatenbank verweist und nicht auf die Entwicklungsdatenbank. Verbindungszeichenfolgen verweisen jedoch auf unterschiedliche Datenbanken (obwohl der Login für beide derselbe ist):
- Produktionssite: „Server=.\SQLExpress;Datenbank=myDbName;Benutzer-ID=myUserName;Passwort=myUserPassword;“
- Dev-Site: „Server=.\SQLExpress;Datenbank=DEVmyDbName;Benutzer-ID=meinBenutzername;Passwort=meinBenutzerpasswort;“
Das scheint etwas Offensichtliches zu sein, das ich übersehen habe. Ein Kollege schlug vor, dass ich einen weiteren Anwendungspool für die zweite IIS-Anwendung erstelle, aber das scheint nicht geholfen zu haben.
UPDATE, nach weiteren Tests:
Ich habe die Verbindungszeichenfolge der Dev-Site geändert in
"Server=.\SQLExpress;Database=DEVmyDbName;User ID=devuser;Password=myNewDifferentPassword;"
und habe einen neuen SQL Server-Login für die Datenbank erstellt und ihm nur Zugriff auf die Entwicklungsdatenbank gewährt. Ich habe die Entwicklungsdatenbank auch als Standarddatenbank des Kontos festgelegt. Ich habe den Zugriff auf die Entwicklungsdatenbank vom Produktionslogin entfernt. Wenn ich versuche, mich bei der Site anzumelden, erhalte ich die folgende Fehlermeldung:
- Der Serverprinzipal „devuser“ kann im aktuellen Sicherheitskontext nicht auf die Datenbank „myDbName“ zugreifen.
Daher weiß ich zwei Dinge mit Sicherheit:
- Da der neue Benutzername zum Anmelden verwendet wird, weiß ich, dass die App die Verbindungszeichenfolge verwendet, die ich ihr gebe.
- Aus irgendeinem Grund scheint es nach der Anmeldung die angegebene Datenbank zu ignorieren und stattdessen zu versuchen, die Produktionsdatenbank zu verwenden.
Immer noch ratlos.
Antwort1
Nach weiteren Recherchen fand ich den Übeltäter – es war ein Anwendungsproblem, das mit der Konfiguration von NHibernate zusammenhing. Eine der festgelegten NHibernate-Konfigurationsoptionen war „default_schema“ – als ich sie entfernte, begann die App, eine Verbindung zur richtigen Datenbank herzustellen.
Es scheint, dass die Eigenschaft „default_schema“ die in der Verbindungszeichenfolge angegebene Datenbank überschrieben hat.
Antwort2
Es hört sich an, als hätten Sie mehr als eine Verbindungszeichenfolge. Ist es möglich, dass eine irgendwo in der Anwendung gespeichert ist?
Erstellen Sie nur auf dem Entwicklungssystem eine neue Benutzer-ID/ein neues Passwort und ändern Sie zur Verwendung Ihre Entwicklungsverbindungszeichenfolge. Wenn eine Verbindung hergestellt wird, liegt das Problem woanders.
Wenn Sie Zugriff auf die Vollversion von SQL haben, können Sie Profiler für die SQLExpress-Instanz ausführen und die Aktivität überwachen.