Die SQL-Anmeldung schlägt für die App fehl, nicht jedoch für SSMS

0

Ich habe eine einfache Testanwendung in C # (4.5) geschrieben, die nur eine Verbindung zu einer Datenbank herstellt und eine Meldung anzeigt. (Grundsätzlich nur zum Testen der Bereitstellung und der DB-Verbindung.) Auf meiner lokalen Workstation funktioniert alles einwandfrei. Ich habe SQL Express 2012 installiert, als aktueller Benutzer verbinden (integrierte Sicherheit), keine Probleme.

Bei der Bereitstellung unter Windows Server 2008 kann die Anwendung jedoch keine Verbindung zur Datenbank herstellen. Es wird weiterhin ein Anmeldefehler angezeigt.

Auf dem Server habe ich die gleiche Installation für SQL Express 2012 durchgeführt. Beim Ausführen der Konsolenanwendung bin ich als Administrator angemeldet. Ich habe sogar versucht, die Authentifizierung im gemischten Modus zu aktivieren, einen Benutzer zu erstellen und eine Verbindung als dieser Benutzer herzustellen. Ich kann in SQL Management Studio eine Verbindung herstellen, aber die Anwendung erhält immer den Fehler "Anmeldung fehlgeschlagen".

Gibt es eine versteckte Sicherheitseinstellung in Windows Server 2008, die ich ändern muss, damit eine .NET-Anwendung eine Verbindung zu einem SQL-Server herstellen kann? Was kann dieses Verhalten verursachen, wenn ich mich über SSMS, aber nicht über eine Anwendung in die Datenbank einloggen kann?

Error:

System.Data.SqlClient.SqlException (0x80131904): Die vom Login angeforderte Datenbank "TestDatabase" kann nicht geöffnet werden. Die Anmeldung ist fehlgeschlagen.   Anmeldung für Benutzer 'sa' fehlgeschlagen.

Dies ist natürlich die Version des Fehlers, als ich versuchte, eine Verbindung herzustellen sa als eine Art letzter Versuch zum Testen. Der gleiche Fehler passiert für TestUser (ein SQL-Benutzer, den ich dafür erstellt habe) sowie PERSONALSERVER\Administrator (Der aktuell angemeldete Benutzer, der die Anwendung ausführt.)

Die Verbindungszeichenfolgen, die ich ausprobiert habe, sind:

  • Data Source=localhost\sqlexpress2012;Initial Catalog=TestDatabase;Integrated Security=True
  • Data Source=localhost\sqlexpress2012;Initial Catalog=TestDatabase;User Id=TestUser;Password=testpassword
David
quelle
Verwenden Sie die Windows-Authentifizierung sowohl in SSMS als auch in Ihrer App?
Amiram Korach
@AmiramKorach: Ich habe Windows-Authentifizierung und SQL-Authentifizierung mit denselben Ergebnissen versucht.
David
Möglicherweise ist Ihre Verbindungszeichenfolge falsch. Bitte füge es hinzu.
Amiram Korach
1
Können Sie das SQL Server-Protokoll überprüfen? Ich hätte nicht erwartet, dass die Anmeldung fehlschlägt, wenn Sie nicht tatsächlich mit der SQL-Datenbank sprechen.
sgmoore
1
& gt; Gibt es eine versteckte Sicherheitseinstellung in Windows Server 2008, die ich ändern muss, damit eine .NET-Anwendung eine Verbindung zu einem SQL-Server herstellen kann? Eine einfache Möglichkeit, dies zu widerlegen, ist das Herunterladen und Testen von LinqPad (von linqpad.net )
sgmoore

Antworten:

1

Erstens habe ich noch nie gesehen, dass eine SQL Express-Instanz das Jahr verwendet. Normalerweise ist es immer localhost \ SqlExpress

Stellen Sie in Configuration Manager sicher, dass TCP / IP und Named Pipes aktiviert sind.

Versuchen Sie in der Systemsteuerung, eine SQL-Verbindung mit dem SQL Server-Treiber herzustellen (unter Verwaltung) - & gt; Datenquellen wie diese testen nur eine lokale Verbindung mit sehr wenigen Variablen (z. B. Ihren Code (der sicher perfekt geschrieben ist :))

Haben Sie auch 2 Stellen, an denen Sie auf Ihre Verbindungszeichenfolge verweisen (ich habe dies getan)? Es wurde in meiner app.config-Datei und als Zeichenfolge in meinem Code (oder sogar als Ressourcenzeichenfolge) gespeichert.

Stellen Sie eine Verbindung über die IP-Adresse statt über den Computernamen her (dies bedeutet, dass Sie auch Ihre Verbindungszeichenfolge aktualisieren - Einzelheiten dazu finden Sie unten in diesem Beitrag).

Zuletzt aktualisieren Sie Ihre Verbindungszeichenfolge auf

Datenquelle =. \ Sqlexpress2012; Initial Catalog = TestDatabase; Integriert   Sicherheit = SSPI; Benutzer-ID = myDomain \ myUsername; Passwort = meinPasswort;

oder probiere es mit:

Server =. \ Sqlexpress2012; Database = TestDatabase;   Trusted_Connection = True;

Ich gehe davon aus, dass der Benutzer über effiziente Rechte an der betreffenden Datenbank verfügt. :)

Stellen Sie sicher, dass die SQL-Ports (normalerweise 1433 und 1434) geöffnet sind.

Melden Sie sich mit dem Benutzernamen / Kennwort bei SSMS an, um sicherzustellen, dass sie über Berechtigungen verfügen.

www.ConnectionStrings.com - Tolle Ressource für Verbindungszeichenfolgen! :)

Dave
quelle
Ich habe die Instanz benannt sqlexpress2012 während der Installation.
David
Viele gute Ratschläge :) TCP / IP und Named Pipes wurden zwar deaktiviert, aber das Aktivieren scheint das Ergebnis nicht zu ändern. Der Datenquellentest hat funktioniert, die Anwendung jedoch immer noch nicht. (Ich frage mich, ob es etwas mit der Vertrauensebene von .NET Framework zu tun hat oder so ähnlich.) Es wird definitiv die Verbindungszeichenfolge aus der Konfigurationsdatei verwendet, da sich der resultierende Fehler ändert, wenn ich ihn ändere (Benutzername usw.). Der Benutzer hat Berechtigungen für die Datenbank und kann problemlos über SSMS mit ihr interagieren.
David
Linq zu Sql. Die App ist so einfach wie nie zuvor, sie erstellt lediglich einen Datenkontext und fragt die erste Zeile der einzigen Tabelle in der Datenbank ab. Ich bin als Administrator angemeldet, daher sollte es als solches ausgeführt werden ...
David
Müssen sie auf dem lokalen Host manuell geöffnet werden? Ich starte die App auf demselben Rechner, auf dem sich die Datenbank befindet (über RDP).
David
Immer noch kein Glück. Es wird definitiv eine Verbindung zum SQL-Server hergestellt, da eine SQL-Fehlermeldung zurückgegeben wird.
David