Jump to content

SQL Server Zugriff von Außen


Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Empfohlene Beiträge

Hallo Leute,

 

ich verwende einen Microsoft SQL Server 2000 und möchte ihn gerne so konfigurieren, dass ich auch von außen (z.B. mit Access oder einer ASP.Net Seite auf einem anderen Webserver) auf den SQL Server zugreifen kann.

 

Leider verweigert mir der Server immer den Zugriff, ich kann nur auf Ihn zugreifen, wenn die Anwendung direkt auf der Maschine läuft.

 

Was muss ich in der Konfiguration ändern, damit dies auch von außen funktioniert?

Ich verwende übrigens gemischte Authentifizierung und die Benutzer, die sich von außen einloggen sind keine AD-, sondern SQL-Benutzer.

 

Grüße,

Irgendware

Link zu diesem Kommentar

In der SQL-Server Netzwerkkonfiguration ist TCP/IP in den Aktiven Protokollen.

 

Ein Zugriff habe ich vorher noch nie probiert, von daher gehe ich nicht davon aus, dass es schon mal funktioniert hat. Eine Konfigurationsänderung hatte ich nie durchgeführt, bei der Installation hatte ich das gleich so ausgewählt.

 

Der ConnectionString sieht in etwa so aus:

password=...;User ID=...;server=DOTNET-INFRARED.DE\SHAREPOINT;database=...

 

Ich vergaß zu erwähnen, dass es sich um eine benannte Instanz handelt, da STS2.0 diese braucht. Eine unbenannte Instanz läuft auf dem Server nicht

Link zu diesem Kommentar

Ungewöhnlich finde ich, daß die Variable SERVER mittendrin steht.

 

Nimm mal etwas in der Form:

 

Data Source=DOTNET-INFRARED.DE\SHAREPOINT;Trusted_Connection=YES;

 

Das ist die kürzeste Form für die integrierte Sicherheit. Dann:

 

Trusted_Connection=NO;User ID=...;PWD=...

 

kreise also das Problem ein.

 

Setze unter HKLM\Software\Microsoft\Microsoft SQL Server\Instanzname\MSSQLSERVER den Wert AuditLevel auf 3 und starte die Instanz neu -> Protokollierung aller Zugriffsversuche, um zu sehen, ob Nutzer oder PWD falsch sind.

 

------------

Gruß, Auer

Link zu diesem Kommentar

Hatte mich auch schon gewundert, der Reg-Wert definiert lediglich eine erweiterte Protokollierung: Jedes Logon (erfolgreich und gescheitert) wird nun im Anwendungsprotokoll aufgezeichnet. Sieh nun also nach, ob das Server-Anwendungsprotokoll Einträge enthält. Falls nein, dann kommt der Client bsp. aufgrund einer Firewall nicht an den Server heran.

 

-----------

Gruß, Auer

Link zu diesem Kommentar

In dem Anwendungungsprotokoll sammeln sich Meldungen für erfolgreiche Logins von lokal abgelegten ASP.Net Seiten und den Sharepoint Team Services.

 

Ich habe gerade mal den SQL Server auch auf meinen Rechner hier installiert, ich bin mit T-Online drin und der Server steht in der Uni. Wenn ich nun von hier aus Versuche mit dem Enterprise Manager auf den Server in der Uni eine Verbindung aufzubauen schlägt dieses auch fehl und es gibt keinen Eintrag ins Protokoll!

 

Ich kann aber mit Telnet auf Port 1433 Verbindungen öffnen, wenn ich das tue gibt es aber auch keinen Protokolleintrag. Da auf dem Server und hier keine Firewall läuft, kann es nicht das Problem sein, dass er keine Verbindung aufbauen kann.

 

Meine Vermutung ist, dass der Server die Verbindung entweder verweigert oder die SQL-Benutzer nur Rechte haben von localhost aus Verbindungen aufzubauen und nicht von außen (wüsste aber auch nicht, wo man sowas einstellen könnte, kenne ich nur von MySQL).

 

Für letzeres Spricht auch, dass mir die Verbindung verweigert wird, wenn ich bei den lokalen ASP.Net Anwendungen anstatt localhost die Domain eintrage.

Link zu diesem Kommentar
Wenn ich nun von hier aus Versuche mit dem Enterprise Manager auf den Server in der Uni eine Verbindung aufzubauen schlägt dieses auch fehl und es gibt keinen Eintrag ins Protokoll!

 

Wenn es keinen Eintrag ins Protokoll gibt, dann wurde die laufende Instanz aufgrund der Netzwerktopologie nicht gefunden. Da genügt ein Router dazwischen, der die Ports sperrt, dies müssen Client und Server nicht selbst leisten.

 

Ich kann aber mit Telnet auf Port 1433 Verbindungen öffnen, wenn ich das tue gibt es aber auch keinen Protokolleintrag.

 

Wie soll ein Anmeldeversuch protokolliert werden, wenn über Telnet zugegriffen wird? Telnet ist doch kein gültiger Sql-Client, sondern spricht den Port bloß auf TCP-Ebene an? Mache denselben Versuch mit OSQL.Exe aus einer DosBox.

 

Meine Vermutung ist, dass der Server die Verbindung entweder verweigert oder die SQL-Benutzer nur Rechte haben von localhost aus Verbindungen aufzubauen und nicht von außen.

 

Dies ist definitiv falsch. Die Sql-Authentifizierung ermöglicht es ja gerade, unabhängig von der NT-Umgebung bsp. von den USA auf einen Rechner in Australien zuzugreifen.

 

Für letzeres Spricht auch, dass mir die Verbindung verweigert wird, wenn ich bei den lokalen ASP.Net Anwendungen anstatt localhost die Domain eintrage.

Gibt es für diese Fälle einen Eintrag im Anwendungsprotokoll?

 

Bei benannten Instanzen wird die Angelegenheit noch komplizierter, da man für diese den UDP 1434 und einen weiteren TCP-Port benötigt.

 

[Edit] Welche Fehlermeldung erhälst Du en detail beim Versuch, per OSQL auf den Server zuzugreifen?

 

------------------

Gruß, Auer

Link zu diesem Kommentar

OK, ich habe jetzt fest gestellt, dass ich einen Fehler in der Clientconfiguration auf dem Server hatte, beim rumprobieren woran es denn nun liegen könnte hatte ich ein Alias für Named Pipes eingerichtet, das ist nun weg.

 

oSQL -S dotnet-infrared.de\Sharepoint -U ... -P ...

funktioniert nun local (vorher ging nur localhost\Sharepoint), das Ereginisprotokoll meldet dann auch den Erfolg

 

Von außen gehts aber weiterhin nicht. (Kein Eintrag im Ereignisprotokoll)

 

Könnte es damit zusammenhängen, dass ich bei der Einrichtung des Servers zuerst die MSDE2000 installiert habe (wegen Sharepoint) und dann auf den SQL Server upgedated habe? War vielleicht die abgespeckte MSDE für externe Zugriffe nicht vorgesehen und die Einstellung ist nach dem Update nicht geändert worden?

 

Edit: Die oSQL Fehlermeldung lauet

[DBNETLIB]SQL Server existiert nicht oder Zugriff verweigert.

[DBNETLIB]ConnectionOpen (Connect()).

 

Fehlgeschlagene Logins tauchen im Ereignisprotokoll übrigens auf, wenn ich sie lokal vom Server ausführe (z.B. mit falschem Passwort), von außen aber nicht

Link zu diesem Kommentar
Von außen gehts aber weiterhin nicht. (Kein Eintrag im Ereignisprotokoll)

Dies ist das, was ich nicht verstehe. Offenbar erreichst Du von außen die Instanz nicht, denn würdest Du sie erreichen und wären bsp. Nutzer und / oder PWD falsch, so würde dies protokolliert werden.

 

Ob MSDE oder die große Engine - dies dürfte keine Rolle spielen.

 

Die Fehlermeldung kommt nicht vom Sql-Server, sondern von der vorgeschalteten Netzbibliothek. Sql-Fehlermeldungen wären bsp. 'Fehler bei der Anmeldung von ...', soweit kommst Du aber gar nicht.

 

Probier mal noch folgendes: Rufe svrnetcn.exe auf, das Tool für die serverseitige Netzwerkkommunikation. Da bei dir keine unbenannte Instanz läuft, setze die benannte Instanz auf 1433 und starte den Server neu. Klar ist, daß die Option 'Server ausblenden' nicht gesetzt sein darf.

 

-------------

Gruß, Auer

Link zu diesem Kommentar

Ich habe die Änderungen durchgeführt, allerdings hat sich nicht geändert. Jetzt habe ich aber die Möglichkeit ohne Angabe einer Instanz immerhin eine andere Fehlermeldung zu bekommen:

 

[DBNETLIB]Ungültige Verbindung.

[DBNETLIB]ConnectionOpen (Invalid Instance()).

 

Das Ereignisprotokoll meldet dann:

18454 :

Login succeeded for user 'Irgendware'. Connection: Non-Trusted.

 

Mit Instanz erhalte ich aber weiterhin die alte Fehlermeldung.

 

Ich schreibe auch mal in die MS Newsgroups, vielleicht hat jemand anders dort das Problem auch schon mal gehabt.

Link zu diesem Kommentar

Bei Microsoft habe ich einen Hinweis gefunden, daß die Fehlermeldung '[DBNETLIB]SQL Server existiert nicht oder Zugriff verweigert.' auch dann auftritt, falls nur die NT-Authentifizierung erlaubt ist. Sieh 'sicherheitshalber' nach, ob unter HKEY_LOCAL_MACHINE\Software\Microsoft\Microsoft SQL Server\Instance Name\MSSQLServer\ der Schlüssel LoginMode den Wert 2 hat - 1 steht für den reinen NT-Modus.

 

Den 'Fehler' 18454 kapiere ich überhaupt nicht. Denn dieser besagt, daß Du dich erfolgreich über eine SQL-Authentifizierung angemeldet hast. Es handelt sich um 'Fehler', denen einfach Einträge in der sysmessages-Tabelle zugrunde liegen, Connection: Non-Trusted heißt gerade eine nicht vertraute Verbindung, 18454 ist die eigentlich erhoffte Erfolgsmeldung.

 

Meldest Du dich mit OSQL an einem SQL-Server an und schickst eine Sql-Anweisung Select description from master.dbo.sysmessages where error = 18454 ab, so erhälst Du den obigen Ausgabetext.

 

Versuch: Definiere dir über Systemsteuerung - ODBC-Datenquellen eine Systemdatenquelle, die den Sql-Server verwendet. Lass bei den Optionen möglichst viel weg, insbesondere darf Sprache nicht auf Deutsch sein, falls bloß Englisch installiert ist. Und auch dort gibt es nochmals einen Punkt 'strong encryption'.

 

Oder versuche, von einem direkt auf dem Server liegenden Script auf den Sql-Server zuzugreifen, das TRUSTED_CONNECTION=NO;User ID=...;PWD=...; enthält, das also explizit den Sql-Modus nutzt.

 

-------------

Gruß, Auer

Link zu diesem Kommentar
Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Schreibe einen Kommentar

Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung jetzt entfernen

  Only 75 emoji are allowed.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor-Fenster leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

×
×
  • Neu erstellen...