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

3798
David

Ich habe eine einfache Testanwendung in C # (4.5) geschrieben, die lediglich 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 immer ein Fehler bei der Anmeldung angezeigt.

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

Gibt es verborgene Sicherheitseinstellungen in Windows Server 2008, die ich ändern muss, damit eine .NET-Anwendung eine Verbindung zu einem SQL-Server herstellen kann? Was könnte dieses Verhalten verursachen, wenn ich mich über SSMS an der Datenbank anmelden kann, aber nicht über eine Anwendung?

Error:

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

Natürlich ist dies die Version des Fehlers, als ich versuchte, die Verbindung als saeine Art letzten Versuch zum Testen herzustellen . Der gleiche Fehler tritt auf TestUser(ein von mir erstellter SQL-Benutzer) 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
0
Verwenden Sie die Windows-Authentifizierung sowohl in SSMS als auch in Ihrer App? Amiram Korach vor 11 Jahren 0
@AmiramKorach: Ich habe Windows-Auth und SQL-Auth in beiden gleichen Ergebnissen versucht. David vor 11 Jahren 0
Möglicherweise ist Ihre Verbindungszeichenfolge falsch. Bitte fügen Sie es hinzu. Amiram Korach vor 11 Jahren 0
Frage mit zusätzlichen Details aktualisiert. David vor 11 Jahren 0
Können Sie das Protokoll des SQL-Servers überprüfen? Ich hätte keine Meldung "Anmeldung fehlgeschlagen" erwartet, es sei denn, Sie sprechen tatsächlich mit der SQL-Datenbank. sgmoore vor 11 Jahren 1
> Gibt es verborgene Sicherheitseinstellungen in Windows Server 2008, die ich ändern muss, damit eine .NET-Anwendung eine Verbindung zu einem SQL-Server herstellen kann? Ein einfacher Weg, dies zu widerlegen, ist das Herunterladen und Testen von LinqPad (von http://www.linqpad.net/) sgmoore vor 11 Jahren 1
hast du es funktioniert user46193 vor 9 Jahren 0

1 Antwort auf die Frage

1
Dave

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

Stellen Sie im Konfigurationsmanager sicher, dass TCP / IP und Named Pipes aktiviert sind.

Versuchen Sie in der Systemsteuerung, eine SQL-Verbindung mit dem SQL Server-Treiber (unter Verwaltung) -> Datenquellen herzustellen, da dies nur eine lokale Verbindung mit sehr wenigen Variablen testet (z. B. Ihr Code (der sicher ist, dass er perfekt geschrieben ist) :)))

Verfügen Sie auch über zwei Stellen, auf die Sie 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.

Verbinden Sie sich über die IP-Adresse anstelle des Computernamens (dies bedeutet auch, dass Sie die Verbindungszeichenfolge aktualisieren - Details dazu unten in diesem Beitrag).

Aktualisieren Sie zuletzt Ihre Verbindungszeichenfolge auf

Datenquelle =. \ Sqlexpress2012; Anfangskatalog = TestDatabase; Integrierte Sicherheit = SSPI; Benutzer-ID = meineDomäne \ meinUsername; Passwort = meinPasswort;

oder probiere es mit:

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

Ich gehe davon aus, dass der Benutzer über effiziente Rechte für die betreffende Datenbank verfügt. :)

Stellen Sie sicher, dass die SQL-Ports, normalerweise 1433 und 1434, offen sind.

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

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

Ich habe die Instanz während der Installation `sqlexpress2012` genannt. David vor 11 Jahren 0
Viele gute Ratschläge :) TCP / IP und Named Pipes waren zwar deaktiviert, aber das Aktivieren ändert nichts an dem Ergebnis. Der Datenquellentest hat funktioniert, aber die Anwendung funktioniert nicht. (Ich frage mich, ob es etwas mit der Vertrauensstufe von .NET Framework oder so etwas zu tun hat.) Es verwendet auf jeden Fall die Verbindungszeichenfolge aus der Konfigurationsdatei, denn wenn ich sie ändere, ändert sich der resultierende Fehler (Benutzername usw.). Der Benutzer hat Berechtigungen für die Datenbank und kann problemlos über SSMS mit dieser interagieren. David vor 11 Jahren 0
Linq bis Sql. Die App ist so einfach wie sie ist, sie erstellt lediglich einen Datenkontext und fragt die erste Zeile der einzigen Tabelle in der Datenbank ab. Ich bin als Administrator angemeldet, also sollte es so laufen ... David vor 11 Jahren 0
Müssen sie manuell auf dem lokalen Host geöffnet werden? Ich führe die App auf derselben Box aus, von der die Datenbank lebt (über RDP). David vor 11 Jahren 0
Immer noch kein Glück. Es wird definitiv eine Verbindung zum SQL-Server hergestellt, da eine SQL-Fehlernachricht zurückgegeben wird. David vor 11 Jahren 0
Führen Sie dies in einem Debugging in VS oder von einem Exe aus? Dave vor 11 Jahren 0
Und tu mir einen Gefallen; Erstellen Sie dazu einfach ein neues Kennwort und aktualisieren Sie sowohl die Verbindungszeichenfolge als auch die des SQL-Servers. Stellen Sie außerdem sicher, dass Sie sich mit der richtigen Instanz verbinden (Wiederum bin ich nicht unhöflich, ich weiß es, da ich es getan habe :)) Dave vor 11 Jahren 0
Ich bin mir also nicht ganz sicher, wie, aber es funktioniert jetzt. Vielleicht hatte ich zuvor einen Tippfehler in der Verbindungszeichenfolge, und ich habe es korrigiert, ohne es beim Testen verschiedener Zeichenfolgen zu bemerken? Alles ist möglich. An dieser Stelle werde ich versuchen, den Fehler zu reproduzieren, um den Fehler einzugrenzen, sodass ich hier eine umfassendere Frage / Antwort haben kann. Im Moment arbeitet es jedoch nur aus unbekannten Gründen (oder scheitert nicht an unbekannten Gründen). So oder so, danke! David vor 11 Jahren 0