Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

Von Linux Server auf MS Server mit mssql connecten Unable to connect

Frage Entwicklung Datenbanken

Mitglied: 69304

69304 (Level 1)

04.12.2009, aktualisiert 11:01 Uhr, 6799 Aufrufe, 9 Kommentare

Hallo!

Erstmal folgendes Szenario:

- Windows Server 2003 mit SQL Server 2000 installiert
- Linux Ubuntu Server 9.10 mit XAMPP 1.7.2 installiert


Auf dem MS-Server ist die Datenbank, auf die zugegriffen werden soll vorhanden.

Da ich aber auf dem Linux Server keinen ODBC-Connector wie unter Windows erstellen kann, will ich eine Abfrage über folgendes Skript machen:

01.
<?php 
02.
$myServer = "192.168.101.2"
03.
$myUser = "sa"
04.
$myPass = "*****"
05.
$myDB = "*****"
06.
$dbhandle = mssql_connect($myServer, $myUser, $myPass) or die("Couldn't connect to SQL Server on $myServer"); 
07.
$selected = mssql_select_db($myDB, $dbhandle) or die("Couldn't open database $myDB"); 
08.
$query = "SELECT * FROM STOERUNGEN WHERE StoerungsNr LIKE '2009460086'"
09.
$result = mssql_query($query); 
10.
while($row = mssql_fetch_array($result)) 
11.
12.
  echo "<li>" . $row["StoerungsNr"] . $row["Firma"] . "</li>"
13.
14.
mssql_close($dbhandle); 
15.
?>

Als Antwort in Browser erhalte ich folgende Meldung:

01.
Warning: mssql_connect() [function.mssql-connect]: Unable to connect to server: 192.168.101.2 in /opt/lampp/htdocs/stoerungen/index.php on line 6 
02.
Couldn't connect to SQL Server on 192.168.101.2

Was kann man hier machen? Erreichen kann ich den Windows Server - Ping erfolgreich! Und von meinem Client mit XAMPP für Windows und einem System-ODBC-Connector funktioniert es tadellos....

Bin schon echt am verzweifeln! Mit der ADODB-Klasse bekomme ich an sich die selbe Fehlermeldung...
Mitglied: Dani
04.12.2009 um 11:00 Uhr
Moin,
wenn ich mich richtig erinnere, musst du wie bei MySQL erstmal die Einstellungen der MSSQL DB anpassen. Denn standardmäßig darf man nicht von extern (Standard: localhost) auf die DB zugreifen. Danach muss der User evtl. angepasst werden. Leider habe ich grad keine MSSQL zur Hand.


Grüße,
Dani
Bitte warten ..
Mitglied: 69304
04.12.2009 um 11:25 Uhr
Hallo Dani!

Danke erstmal für die schnelle Antwort!

Auf diese Idee bin ich auch schon gekommen, aber habe es ausgeschlossen, da der Zugriff von meiner Workstation (Win XP - selbes Skript) ja funktioniert.

Gut ok, ich weiß jetzt zwar nicht, in wie weit der System-Connector sich da einmischt, aber da funktioniert es!?!
Bitte warten ..
Mitglied: Gilneas
04.12.2009 um 11:40 Uhr
Hast du mal versucht den Instanznamen deines SQL-Servers mit anzugeben?
192.168.101.2\Instanzname
Bitte warten ..
Mitglied: 69304
04.12.2009 um 11:56 Uhr
Da ich leider den Instanzname nicht kenne (Wo bekomme ich den her?), habe ich den Standartnamen "192.168.101.2\MSSQLSERVER" verwendet.

Dies bringt aber auch keine Lösung. Selber Fehler.

Kann das vielleicht mit der Domäne zusammen hängen? Da meine Workstation in der Domäne hängt, und der Linux Server nicht?!?


EDIT:

Habe ihn jetzt per Samba in die Domäne integriert. Bringt aber leider auch nichts...
Bitte warten ..
Mitglied: 32067
04.12.2009 um 12:45 Uhr
Hallo,

- die PHP Anleitung meint man muss unter Linux die freetds-lib installiert haben, auf die greift php zurück ( http://www.php.net/manual/de/mssql.requirements.php ). Ist die drauf ? (ok, ich würde dann eigentlich auch eine andere Fehlermeldung erwarten).

- Die SQL-Authentisierung an ? Wenn nur Windows-Auth angeschaltet wird das nix mit sa als User.

- TCP als Protokoll im SQL-Server aktiviert ? Mit Named Pipes wird man nix von Linux aus meine ich.

- Geht ein "telnet <db-server> 1433" vom Linux-Rechner ? Das ist der Standard TCP/IP Port von MS SQL.

Mehr fällt mir jetzt erstmal nicht ein
Bitte warten ..
Mitglied: 69304
04.12.2009 um 13:01 Uhr
Hallo!

- Die FreeTDS habe ich nachinstalliert, XAMPP neu gestartet - selber Fehler. Muss man dies noch irgendwie in die php.ini integrieren?

- SQL-Auth steht auf "SQL und Windows" (Anmerkung: Von der Windows-Workstation geht das Skript)

- TCP als Protokoll? TCP/IP-Protokoll ist logischerweise aktiviert, oder meinst du was anderes damit?!?

- Telnet funktioniert.

-.-


EDIT:

Testweise Anmeldung im Skript als Domänen-Admin - auch leider erfolglos...
Bitte warten ..
Mitglied: Gilneas
04.12.2009 um 13:24 Uhr
Vielleicht hilft es weiter, wenn du mit der Funktion "mssql_get_last_message" die letzte Meldung des Server zurückgeben lässt. Evtl. hilft das bei der Fehlersuche weiter, wenn der Server einen Grund für den reject angibt.

Link: http://php.net/manual/de/function.mssql-get-last-message.php


Zum Thema Instanzname:
01.
SQL Server Instance Name : 
02.
 
03.
 
04.
In SQL Server Management Studio->RegisterServers->double click your server to open the Object Explorer -> right click to select the properties window ->General Tab - to see the ServerName (instance name) 
05.
 
06.
  
07.
 
08.
or Open a new query in SQL Server Management window  and execute the following 
09.
 
10.
-- to get the sql server instance name 
11.
 
12.
select @@ServerName  
Bitte warten ..
Mitglied: 69304
04.12.2009 um 13:35 Uhr
Als Name wird mir da "(local)" angezeigt - ist dies möglich?

---

Ich habe nun 2 Skripte gemacht. Eins, was per mssql_connect verbindet und das zweiter, dass per ADODB verbinden soll.


Das ADOBD-Skript:

01.
<?php 
02.
define("SQL_HOST", "192.168.101.2"); 
03.
define("SQL_USER", "sa"); 
04.
define("SQL_PASS", "+++"); 
05.
define("SQL_DB", "+++"); 
06.
 
07.
include('adodb5/adodb.inc.php'); 
08.
 
09.
$db =& ADONewConnection('odbc_mssql'); 
10.
$dsn = "Driver={SQL Server};Server=".SQL_HOST.";Database=".SQL_DB.";"
11.
$db->Connect($dsn,SQL_USER,SQL_PASS); 
12.
 
13.
$recordSet = &$db->Execute("SELECT StoerungsNr, Firma FROM STOERUNGEN WHERE StoerungsNr LIKE '2009460086'"); 
14.
 
15.
if(!$recordSet) { 
16.
	print $db->ErrorMsg(); 
17.
} else
18.
	while(!$recordSet->EOF) { 
19.
		print '<li>' . $recordSet->fields[0] . ' - ' . $recordSet->fields[1].'</li>'
20.
		$recordSet->MoveNext(); 
21.
22.
23.
 
24.
$recordSet->Close(); 
25.
$db->Close(); 
26.
?>
Rückmeldung:

01.
Notice: Use of undefined constant ODBC_BINMODE_RETURN - assumed 'ODBC_BINMODE_RETURN' in /opt/lampp/htdocs/stoerungen/adodb5/adodb.inc.php on line 4230 
02.
 
03.
Notice: Use of undefined constant SQL_CUR_USE_DRIVER - assumed 'SQL_CUR_USE_DRIVER' in /opt/lampp/htdocs/stoerungen/adodb5/adodb.inc.php on line 4230 
04.
 
05.
Strict Standards: Only variables should be assigned by reference in /opt/lampp/htdocs/stoerungen/index_adodb.php on line 9

Das mssql-Skript:

01.
<?php 
02.
define("SQL_HOST", "192.168.101.2"); 
03.
define("SQL_USER", "sa"); 
04.
define("SQL_PASS", "+++"); 
05.
define("SQL_DB", "+++"); 
06.
 
07.
$dbhandle = mssql_connect(SQL_HOST, SQL_USER, SQL_PASS) or die('<p><b>Konnte keine Verbindung zu "'.SQL_HOST.'" herstellen!</b></p>'); 
08.
$selected = mssql_select_db(SQL_DB, $dbhandle) or die('<p><b>Konnte Datenbank "'.SQL_DB.'" nicht &ouml;ffnen!</b></p>'); 
09.
 
10.
$query = "SELECT * FROM STOERUNGEN WHERE StoerungsNr LIKE '2009460086'"
11.
$result = mssql_query($query); 
12.
 
13.
while($row = mssql_fetch_array($result)) 
14.
15.
  echo "<li>" . $row["StoerungsNr"] . " - " . $row["Firma"] . "</li>"
16.
17.
 
18.
mssql_close($dbhandle); 
19.
?>
Rückmeldung:

01.
Warning: mssql_connect() [function.mssql-connect]: Unable to connect to server: 192.168.101.2 in /opt/lampp/htdocs/stoerungen/index_mssql.php on line 7 
02.
 
03.
Konnte keine Verbindung zu "192.168.101.2" herstellen!

Interessant wäre zu erwähnen, dass beide Skripte von der Windows-Workstation mit XAMPP funktionieren!
Bitte warten ..
Mitglied: Gilneas
09.12.2009 um 08:55 Uhr
Was liefert denn nun mssql_get_last_message zurück?

01.
Strict Standards: Only variables should be assigned by reference in /opt/lampp/htdocs/stoerungen/index_adodb.php on line 9
Und hier scheint es, als dürftest du diesen Aufruf nicht als Referenz anlegen:
01.
$db =& ADONewConnection('odbc_mssql');

Trotz allem liegt das Problem wohl noch etwas früher, beim Verbindungsaufbau.
Und (Local) als Ergebnis für den Instanznamen finde ich etwas seltsam. Du solltest zumindest den Computernamen des Servers rausbekommen.

Was mir noch einfällt:
Welchen Authentifizierungstyp verwendest du? - Wenn du Windows Authentifizierung verwendest, dann würde das erklären, warum der Linux Client nicht drauf kommt...
Und du könntest mal in den Serverlogs nachsehen, ob da Einträge gemacht werden, evtl. steht ja was dabei.
Bitte warten ..
Neuester Wissensbeitrag
Festplatten, SSD, Raid

12TB written pro SSD in 2 Jahren mit RAID5 auf Hyper-VServer

Erfahrungsbericht von Lochkartenstanzer zum Thema Festplatten, SSD, Raid ...

Heiß diskutierte Inhalte
Windows Userverwaltung
Ausgeschiedene Mitarbeiter im Unternehmen - was tun mit den AD Konten? (34)

Frage von patz223 zum Thema Windows Userverwaltung ...

LAN, WAN, Wireless
gelöst Server erkennt Client nicht wenn er ausserhalb des DHCP Pools liegt (28)

Frage von Mar-west zum Thema LAN, WAN, Wireless ...

LAN, WAN, Wireless
FritzBox, zwei Server, verschiedene Netze (21)

Frage von DavidGl zum Thema LAN, WAN, Wireless ...

Viren und Trojaner
Aufgepasst: Neue Ransomware Goldeneye verbreitet sich rasant (20)

Link von Penny.Cilin zum Thema Viren und Trojaner ...